Php MySQL内部联接查询只返回不同的值
以下查询用于分页脚本,该脚本用于从数据库返回新闻帖子。它可以工作,但不会返回任何具有相同日期或标题的项目 我如何重写它以获得标题和/或日期相同的项目 查询:Php MySQL内部联接查询只返回不同的值,php,mysql,sql,Php,Mysql,Sql,以下查询用于分页脚本,该脚本用于从数据库返回新闻帖子。它可以工作,但不会返回任何具有相同日期或标题的项目 我如何重写它以获得标题和/或日期相同的项目 查询: "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
"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
--------------------------------------------
问题是按用法分组 SQL对于每个不同的分组列值只返回一条记录-不是group by子句中的其他列,应该在聚合函数中 不幸的是,MySQL默默地接受了这个错误的查询(这是许多错误的根源),并从分组中选择了一条记录。在这种情况下,由于分组中只有post_日期,因此每个唯一的日期/时间只有一条记录
我怀疑“正确”的行为只是通过删除组(可能用ORDER BY替换),尽管这可能不是目的-使用预期输出更新帖子可能会对如何更新查询提出有用的建议。确保where子句中的列具有正确的数据,例如,删除where子句,然后尝试执行。@AK47问题在于我应该使用(ORDER BY)的(GROUP BY)。谢谢。@CosmoGroupBy完全不是必需的,您是正确的。但这并不是错误输出的正确原因。即使日期列在group by中,但它将按完整日期(包括hh:mm:sss)分组,以秒为单位的差异记录也将被单独处理,即使日期列在group by中,但它将按完整日期(包括hh:mm:sss)分组,以秒为单位存在差异的记录也将被单独处理。@user2864740如果没有group by,我如何使此查询按降序日期或升序日期排序?@Cosmo只需按字段排序;分组是怎么回事?(没有一些供应商提供的XML这样的分层格式,SQL只能返回表格数据和组,结果仍然是表格输出。)@user2864740感谢您解决了它。我不确定我是否理解你的问题“分组是怎么回事?”。分组是从最早的事件拉到最新的事件,并可以选择从最早的事件拉到最新的事件。我希望我理解你的问题。@Cosmo我的意思是,“为什么结果需要分组?”我很高兴你能够解决你的问题。