MySQL内部联接查询仅返回DISTINCT值

时间:2014-03-15 04:54:28

标签: php mysql sql

以下查询适用于从DB返回新闻帖子的分页脚本。它有效,但不会返回任何具有相同日期或标题的项目。

如何重写此内容以获取具有相同标题和/或相同日期的项目?

查询:

"SELECT p.post_id, p.post_title, p.post_detail, p.post_user, p.post_slug, p.post_date, p.post_type 
 FROM ".TBL_POSTS." as p 
 LEFT JOIN ".TBL_POST_CATEGORIES." as c
 ON c.post_ID = p.post_id
 WHERE p.post_type = 'post' AND c.category_ID = 5
 GROUP BY p.post_date DESC", 10);

以下是POST表的示例

--------------------------------------------
post_id | post_title  | post_date
--------------------------------------------
10      | news post 1 | 2014-02-13 21:09:45
--------------------------------------------
12      | news post 2 | 2014-02-14 21:09:45
--------------------------------------------

以下是CATEGORIES表的示例

--------------------------------------------
id      | post_ID  | category_ID
--------------------------------------------
1       | 10       | 5
--------------------------------------------
2       | 12       | 5
--------------------------------------------

1 个答案:

答案 0 :(得分:3)

问题在于GROUP BY的使用。

SQL只返回一个记录每个不同的分组列值 - 每隔一列,而不是group by子句, 应该在聚合函数中。

不幸的是,MySQL默默地接受这个不正确的查询(这是许多错误的来源),并从分组中选择记录"at random"。在这种情况下,由于只有post_date在分组中,因此每个唯一日期/时间只有一条记录。


我怀疑 a "正确"行为只是删除GROUP BY(可能用ORDER BY替换它),虽然这可能不是意图 - 用期望的输出更新帖子可能会导致有关如何更新查询的有用建议。