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