我正在創(chuàng)建自己的 WordPress 插件,將配置文件導入為帖子,并且在腳本運行時,我希望改進插入/更新帖子的查詢。這個腳本每 5 分鐘運行一次,并且像這樣工作,1.從本地用戶表中的外部源導入/更新所有配置文件。這很簡單并且工作正常2 . 在更新之前將所有現(xiàn)有帖子自定義字段狀態(tài)設置為離線$offline = "UPDATE $meta SET meta_value='offline' WHERE meta_key='status'";3 . 從表用戶中選擇所有在線的配置文件$new_query = "SELECT * FROM users WHERE status='online' ORDER BY visitors DESC";4 . 對于每個配置文件,如果帖子存在,則更新,否則創(chuàng)建新帖子$result = $wpdb->get_results($new_query);foreach ($result as $post){ $cat = $post->gender.'s'; $getterm = get_term_by('name',$cat,'user-category'); $cat_id = $getterm->term_id; $custfields = array ( 'name' => $post->name, 'age' => $post->age, 'subject' => $post->subject, 'status' => $post->status, 'fans' => $post->fans, 'visitors' => $post->visitors, ); endif; $postarr = array ( 'post_title' => $post->username, 'post_name' => $post->username.'-profile', 'post_content' => 'something', 'post_type' => 'users-profile', 'post_category' => array($cat_id), 'post_status' => 'publish', 'meta_input' => $custfields ); $postcheck = get_page_by_title($post->username,OBJECT, 'users-profile'); if($postcheck): update_post_meta($postcheck->ID ,'subject', $post->subject ); update_post_meta($postcheck->ID ,'status', $post->status ); update_post_meta($postcheck->ID ,'visitors', $post->visitors ); else : wp_set_object_terms(wp_insert_post( $postarr,true),$cat_id,'user-category',true); endif;})
1 回答

幕布斯6054654
TA貢獻1876條經(jīng)驗 獲得超7個贊
前綴索引 (KEY?meta_key
(?meta_key
(191))) 是可憎的。是的,由于utf8mb4
.?但它正在傷害你。做這個
SELECT?MAX(CHAR_LENGTH(meta_key))?from?wp_postmeta;
如果返回 191 或更小,則將 meta_key 的大小更改為 191 并(191)
在索引中刪除。
UPDATEing
很多行中的標志似乎是一種笨拙的處理方式。有沒有一種方法可以在不使用離線/在線標志的情況下簡單地折疊新數(shù)據(jù)?(我想我仍然缺少意圖。)如果它是一百萬行,則該更新可能需要很長時間。
“所有不在 SELECT 中的帖子”——這聽起來像是“多表更新”語句。這將涉及一個LEFT JOIN ON ... WHERE ... IS NULL
.?你能用重要的列模擬幾行嗎?向我們展示這些表格中應該包含的內(nèi)容的“之前”和“之后”。
您還可以將上述操作應用于post_name
.
age
整數(shù)(11)
你每年都在增加嗎?
- 1 回答
- 0 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消