以下查询适用于从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
--------------------------------------------
答案 0 :(得分:3)
问题在于GROUP BY的使用。
SQL只返回一个记录每个不同的分组列值 - 每隔一列,而不是group by子句, 应该在聚合函数中。
不幸的是,MySQL默默地接受这个不正确的查询(这是许多错误的来源),并从分组中选择记录"at random"。在这种情况下,由于只有post_date在分组中,因此每个唯一日期/时间只有一条记录。
我怀疑 a "正确"行为只是删除GROUP BY(可能用ORDER BY替换它),虽然这可能不是意图 - 用期望的输出更新帖子可能会导致有关如何更新查询的有用建议。