自定义mysql选择语句为wordpress
问题描述:
我已经开发了一个网站的分类,我一直在努力,可能会滥用WordPress的分类系统 - 职位是根据他们所指的主题归类(比方说,猫,狗,猴子)以及它是什么类型的职位(比如专家,组织,文章)。所以我想找到所有关于猫狗的帖子,这些是组织。 IN(猫,狗)和IN(组织)中的某些东西......至少它对我来说意义重大,但我无法弄清楚任务的正确SQL语法。自定义mysql选择语句为wordpress
根据我在this article on wordpress.com中找到的内容,我从下面的查询中构建...但我不确定如何说'我想要的属于(类别1或2 )和(属于类别3)(例如,猫1 =猫,2 =狗,3 =组织)。
这可能很简单,当我得到回复时我会踢自己。
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id = 1,2,3
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->posts.post_status = 'publish'
ORDER BY $wpdb->postmeta.meta_value ASC
谢谢!
答
由于term_taxonomy
表的不同行上存在两个条件,因此您必须连接到该表两次以便在结果集的一行中进行比较。
另外我不认为你需要使用LEFT JOIN,因为你在WHERE子句中使用条件。外连接通常比内连接慢。
您可以使用表别名,因此您不必一直重复变量表名称。
,所以我没有测试,但你需要满足以下条件应更贴近:
SELECT * FROM $wpdb->posts p
INNER JOIN $wpdb->postmeta m ON (p.ID = m.post_id)
INNER JOIN $wpdb->term_relationships r1 ON (p.ID = r1.object_id)
INNER JOIN $wpdb->term_taxonomy x1
ON (r1.term_taxonomy_id = x1.term_taxonomy_id)
INNER JOIN $wpdb->term_relationships r2 ON (p.ID = r2.object_id)
INNER JOIN $wpdb->term_taxonomy x2
ON (r2.term_taxonomy_id = x2.term_taxonomy_id)
WHERE x1.term_id IN (1, 2) AND x1.taxonomy = 'category'
AND x2.term_id = 3 AND x2.taxonomy = 'category'
AND p.post_status = 'publish'
ORDER BY m.meta_value ASC
真棒;像魅力一样工作。我添加了“GROUP BY p.id”,因此不会返回重复的帖子。谢谢! – bennettk 2009-02-16 21:10:46