【发布时间】:2014-11-14 02:09:36
【问题描述】:
我有一些常规的 WordPress 帖子需要按父类别从数据库中获取,并按我在数据库中创建的自定义表的结果排序。
我要检索帖子的父类别(包括子类别)称为 explorer,id 为 29。
自定义表称为wp_upvotes。在这个表中有几列,但我们关心的唯一列可能是id 和postID。我想按postID 等于wp_post.ID 的行数来订购wp_posts,如果该表中没有其他帖子的行,那么它们应该在最后按日期排序.按日期,我希望upvotes 的数量最多,upvotes 的数量最少。
我尝试过的查询是这样的(它只返回第一个帖子,而不是全部):
$catIDs = array(29,30,31,32);
SELECT wp_posts.*, COUNT(wp_upvotes.id) AS upvotes FROM wp_posts
LEFT JOIN wp_upvotes ON (wp_posts.ID = wp_upvotes.postID)
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
AND wp_term_taxonomy.taxonomy = 'category'
AND wp_term_taxonomy.term_id IN (" . implode(',', $catIDs) . "))
AND wp_posts.post_status = 'publish'
ORDER BY upvotes DESC, wp_posts.post_date DESC
当我删除 wp_upvotes 表的 LEFT JOIN 时,它会返回所有正确的帖子。为什么当我使用 LEFT JOIN 时它只返回一行?
SELECT 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
AND wp_term_taxonomy.taxonomy = 'category'
AND wp_term_taxonomy.term_id IN (" . implode(',', $catIDs) . "))
AND wp_posts.post_status = 'publish'
ORDER BY wp_posts.post_date DESC
【问题讨论】: