SELECT语句之前的ORDER?

时间:2017-10-18 02:42:53

标签: php mysql

我有这个很好的查询

$sub_query = "SELECT * FROM posts WHERE post_status = 'published' AND 
post_user = '{$out}' ORDER BY post_id DESC ";

该查询返回按降序帖子ID排序的所有特定用户帖子。问题是它遍历每个帖子用户并相应地订购它们但我希望最新的帖子不仅仅是每个用户的最新帖子。

这是一张希望有助于更好地解释的结果图片 ORDER before SELECT statement ORDER before SELECT statement

ORDER before SELECT statement ORDER before SELECT statement

您可以看到针对特定用户运行的查询,然后转到下一个我尝试获取最新帖子ID的用户

我试图遵循这个similar question,但它带回了相同的结果。

$sub_query = "SELECT * FROM (SELECT * FROM posts ORDER BY post_id DESC) 
T WHERE post_status = 'published' AND post_user = '{$out}' ";

我可以先订购所有选定的帖子吗?然后使用我的where语句?

2 个答案:

答案 0 :(得分:0)

如果您想要每位用户发布最新帖子,请移除where并添加limit

SELECT p.*
FROM posts p
WHERE p.post_status = 'published'
ORDER BY post_id DESC
LIMIT 1;

答案 1 :(得分:0)

我不明白你要找的是什么 1)每个用户的最后一个帖子的列表 2)按最新排序的所有帖子列表(无论用户是谁) 在这两种情况下,您不需要循环所有用户,您可以提取仅使用查询本身排序的数据(我强烈建议您使用此解决方案)。

选项1:

SELECT *
FROM posts
WHERE post_id IN (
    SELECT MAX(post_id)
    FROM posts 
    WHERE post_status = 'published'
    GROUP BY post_user
)
ORDER BY post_user ASC

选项2:

SELECT *
FROM posts
WHERE post_status = 'published'
post_id DESC