mysql / php,按用户ID分组,按时间排序

时间:2014-10-27 20:08:33

标签: mysql

我有一个包含userID,highscore和时间戳的表。

我想按时间戳排序,以便最新的条目位于顶部,而且,在列表中不显示任何两次用户ID,ergo,它们需要分组。

我还需要按分数排序。

$sql="SELECT * FROM $table GROUP BY userID  ORDER BY time DESC";

$ sql2 =“SELECT * FROM $ table GROUP BY userID ORDER BY score DESC”;

此时,我看到Group by先完成,所以我可能只是得到一些随机的时间戳/标记。我需要先订购它们,然后将它们分组。但是,如果我切换Group by和Order by,我会收到错误。

有人可以帮帮我吗?感谢。

1 个答案:

答案 0 :(得分:1)

GROUP总是在ORDER之前完成。要在分组之前订购记录,有两种方法:

    子查询中的
  1. ORDER BY,然后应用GROUP BY。这通常不是更好的方法,因为运行子查询非常昂贵,尤其是如果您有许多记录。对于少量记录,这将没有问题。

    $sql="SELECT * FROM (SELECT * FROM $table ORDER BY time DESC) GROUP BY userID";

  2. 更好的解决方案是在子查询中获取MAX(time),然后在userID和最长时间将其加入到您的表中。

    SELECT p1.* FROM $table t1 INNER JOIN ( SELECT max(time) MaxTime, userID FROM $table GROUP BY userID ) t2 ON t1.userID = t2.userID AND t1.time = t2.MaxTime order by t1.time DESC;

  3. 我是从头顶写下来的。

    HTH