1
我在Wordpress網站有幾個框必須顯示屬於某些類別的帖子的選擇,也不屬於其他幾個。只使用本地WordPress的工具,結果這樣的查詢:如何簡化此Wordpress查詢以提高性能?
SELECT SQL_CALC_FOUND_ROWS wp_posts.*
FROM wp_posts
INNER JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy
ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
WHERE 1=1
AND wp_term_taxonomy.taxonomy = 'category'
AND wp_term_taxonomy.term_id IN ('1', '49')
AND wp_posts.ID NOT IN (
SELECT tr.object_id
FROM wp_term_relationships AS tr
INNER JOIN wp_term_taxonomy AS tt
ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.taxonomy = 'category'
AND tt.term_id IN ('3394', '49', '794', '183'))
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 5;
現在這是相當昂貴的,並最終在慢查詢日誌。所以我很樂意放棄wordpress方式並手動構建查詢。的第一件事是,我可以消除對wp_term_taxonomy
表的需要(我可以用term_taxonomy_id代替term_id,我永遠無法理解爲什麼WordPress的同時需要),但我仍然有NOT IT (SUBQUERY)
問題,由於類別被排除在外。
所以考慮到我可以自由地做任何事情(如創建其他的「服務」表,如果他們可能會幫助),什麼是要加快這些條件下,該搜索的最佳方式?
不,因爲我的帖子可能屬於被通緝的和不需要的類別,在這種情況下,我必須排除他們。有了這個條款,我只是過濾不需要的類別的行,但帖子仍然會顯示,如果它也有一個想要的。 – 2010-12-21 09:49:40
我不確定爲什麼一篇文章可能是想要的和不想要的,但是你不能使用AND和OR來鏈接所有這些需求嗎?像AND(x IN(1,2)AND(x NOT IN 3,4)或x IN(''))等等。 – Oli 2010-12-21 15:19:40