【发布时间】:2019-08-03 11:22:45
【问题描述】:
在上次 MySQL 更新后,我一直在寻找一种方法来纠正我的查询。我知道 Group By 列不是唯一的,但我不知道如何更新查询以符合严格的规则并仍然保留我正在寻找的结果。有人有建议吗?
SELECT
$SQLTable_Posts.`post_id`,
$SQLTable_Posts.`profile_id`,
$SQLTable_Posts.`post_title`,
$SQLTable_Posts.`post_slug`,
$SQLTable_Posts.`post_date`
FROM $SQLTable_Posts
WHERE $SQLTable_Posts.`post_date` > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY $SQLTable_Posts.`profile_id`
ORDER BY $SQLTable_Posts.`post_date` DESC
我想简单地返回每个配置文件发布的最新帖子。比如我的数据库是这样的;
<table><tbody><tr><th>post_id</th><th>profile_id post_date</th><th> </th></tr><tr><td>0001</td><td>0001</td><td>2019-03-12 00:00:00</td></tr><tr><td>0002</td><td>0002</td><td>2019-03-12 00:00:00</td></tr><tr><td>0003</td><td>0001</td><td>2019-03-12 01:00:00</td></tr><tr><td>0004</td><td>0004</td><td>2019-03-12 00:00:00</td></tr></tbody></table>
我希望结果返回这个;
<table><tbody><tr><th>post_id</th><th>profile_id post_date</th><th> </th></tr><tr><td>0003</td><td>0001</td><td>2019-03-12 01:00:00</td></tr><tr><td>0002</td><td>0002</td><td>2019-03-12 00:00:00</td></tr><tr><td>0004</td><td>0004</td><td>2019-03-12 00:00:00</td></tr></tbody></table>
【问题讨论】:
-
您要寻找的结果是什么?举个例子
-
您选择的每一列都应该被聚合(COUNT、SUM 等)或在您的 GROUP BY 子句中。
-
sql 如何知道 profile_id 0001 应该使用 post_id 0003 还是 0001 ?应该选择哪个?
-
@kun-chan 我明白你的意思,感谢你让我思考。以前因为我按日期排序并按用户分组,它会抓取最新的,但是我没有看到任何解释如何告诉 sql 先抓取哪个文件的文档。
-
如果
profile_id是主键,您不需要做任何特别的事情,因为所有其他列在功能上都依赖于它。