0

我有一个正在编码的社交网络,但它与其他的有点不同,在这种情况下,每个用户在提要部分只显示一个状态。

所以我需要按日期对状态进行排序,最新的在最上面,但也按用户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 正在工作,但 order by 没有。

提前致谢。

4

3 回答 3

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 的查询将返回不确定的状态);如果您需要控制这种情况,您将需要定义如何确定应该选择哪种状态更新。

于 2012-05-11T12:10:14.573 回答
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。

示例 1
示例 2

于 2012-05-11T11:23:34.503 回答
1
SELECT userID, max(addedDate)
FROM status
WHERE userID != "83" #This is just so my statuses don't show
GROUP BY userID
于 2012-05-11T11:24:59.183 回答