需要帮助在数据库中为最常查看的表排序

时间:2013-03-02 23:43:37

标签: count group-by sql-order-by distinct

我想弄清楚如何列出哪些帖子被查看最多,特别是前5名。

viewid | postid | ip      | dateline

  1    |  16    | 1.1.1.1 | 987654
  2    |  12    | 1.1.1.1 | 987655
  3    |  15    | 2.2.2.2 | 987656
  4    |  16    | 2.2.2.2 | 987657
  5    |  16    | 3.3.3.3 | 987658
  6    |  18    | 1.1.1.1 | 987659
  7    |  16    | 1.1.1.1 | 987660
  8    |  12    | 4.4.4.4 | 987661

我想打印出以下内容:

Post ID - 16 (3 views)
Post ID - 12 (2 views)
Post ID - 15 (1 view)
Post ID - 18 (1 view)

因此即使有4行帖子ID为16,它也会忽略1,因为该IP地址已经看到了。然后按大多数视图排序,然后按时间戳排序。

这是我目前正在尝试的(不工作):

$query_ranks_views = mysql_query("SELECT postid, COUNT(DISTINCT ip) AS num FROM views WHERE postid > '0' GROUP BY postid ORDER BY COUNT('DISTINCT ip') DESC LIMIT 5");
while($ranks_views = mysql_fetch_array($query_ranks_views)){
    echo("
        $ranks_views[postid] (". $ranks_views['COUNT(DISTINCT ip)'] .")
    ");
}

1 个答案:

答案 0 :(得分:1)

查询确实有效:http://sqlfiddle.com/#!2/95ee5/1 不正确的是你想按时间戳订购。哪个时间戳?帖子的时间戳或视图的最后一个时间戳?或者也许是观点的平均时间戳?