我有一个社交网络,我正在编码,但它与其他网络有点不同,在这种情况下,每个用户在供稿部分只有一个状态显示。
所以我需要按日期对状态进行排序,最新的状态排在最前面,但也要按用户ID分组 不幸的是,我似乎无法让这个工作....
这是我目前的查询:
SELECT *
FROM status
WHERE userID != "83" #This is just so my statuses don't show
GROUP BY userID
ORDER BY addedDate DESC
LIMIT 10
我希望看到最新的状态结果,而且每个用户只有一个,而我会看到第一个状态,因此group by工作正常但不是订单。
提前致谢。
答案 0 :(得分:2)
正如对Robin's answer的评论中所提到的,这种方法是不可靠的,因为MySQL并不保证它总能从每个组返回最新状态。您必须使用子查询加入您的表,该子查询选择最新状态(基于addedDate
)。
SELECT *
FROM status
NATURAL JOIN (
SELECT userID, MAX(addedDate) as addedDate
FROM status
GROUP BY userID
) AS mostRecent
ORDER BY addedDate DESC
LIMIT 10
请注意,如果用户具有相同addedDate
的多个状态更新,则服务器将返回所有这些状态(而Robin的查询将返回不确定的状态);如果您需要控制这种情况,则需要定义如何确定应选择哪种状态更新。
答案 1 :(得分:1)
SELECT *
FROM ( SELECT *
FROM status
WHERE userID != "83"
ORDER BY addedDate DESC) AS h
GROUP BY userID
ORDER BY addedDate DESC
LIMIT 10
你必须在GROUP BY'ing之前进行ORDER BY。
答案 2 :(得分:1)
SELECT userID, max(addedDate)
FROM status
WHERE userID != "83" #This is just so my statuses don't show
GROUP BY userID