【问题标题】:Ordering by top commented由顶部评论订购
【发布时间】:2011-02-12 16:33:41
【问题描述】:

如何使用 PHP 和 mysql 列出网站上评论最多的页面?

数据库是这样设置的:

page_id | username | comment | date_submitted
--------+----------+---------+---------------
      1 |  bob     | hello   | current date
      1 |  joe     | byebye  | current date
      4 |  joe     | stuff   | date
      3 |  mark    | this    | a date

您将如何查询它以使其按评论最多的页面排序?

这是一个简单的查询开始(XXX 是我认为我需要帮助的领域):

$querycomments = sprintf("SELECT * FROM comments WHERE " .
    "XXX = %s ORDER BY XXX DESC",
    GetSQLValueString(????????????, "text"));

【问题讨论】:

  • 顶评论?你想显示第 4 页评论 1st 然后 3 ..then...1 那样还是什么?
  • 是的,这只是一个例子。我想要按每页上的 cmets 数量从多到少排序的页面

标签: mysql comments


【解决方案1】:

好吧,如果您正在寻找一种按大多数 cmets 的顺序列出页面的方法,我会按页面 ID 分组,然后按计数排序,例如:

select page_id, count(*)
from comments
group by page_id
order by 2 desc, 1 asc

从技术上讲,您不需要1 asc,但我希望即使在递减的评论计数中也能确保特定的顺序。因此,如果出现许多具有相同评论数的页面,您可以轻松地在该组中找到特定页面。换句话说,如果第 7 页有两个 cmets 而所有其他页面只有一个,那么您将得到(7,1,2,3,4,5,6,8,9)。如果没有 1 asc,第 1 到 6 页和第 8 到 9 页可以按任何顺序返回,例如 (7,6,2,4,3,9,1,8,5),它甚至可以在查询运行之间发生变化。

例如,构建一个示例表:

> DROP TABLE COMMENTS;
> CREATE TABLE COMMENTS (PAGE_ID INTEGER,COMMENT VARCHAR(10));
> INSERT INTO COMMENTS VALUES (1,'1A');
> INSERT INTO COMMENTS VALUES (2,'2A');
> INSERT INTO COMMENTS VALUES (1,'1B');
> INSERT INTO COMMENTS VALUES (3,'3A');
> INSERT INTO COMMENTS VALUES (2,'2B');
> INSERT INTO COMMENTS VALUES (1,'1C');
> INSERT INTO COMMENTS VALUES (3,'3B');
> INSERT INTO COMMENTS VALUES (3,'3C');
> INSERT INTO COMMENTS VALUES (3,'3D');

然后显示所有数据:

> SELECT * FROM COMMENTS
  ORDER BY 1, 2;
    +---------+---------+
    | PAGE_ID | COMMENT |
    +---------+---------+
    |       1 | 1A      |
    |       1 | 1B      |
    |       1 | 1C      |
    |       2 | 2A      |
    |       2 | 2B      |
    |       3 | 3A      |
    |       3 | 3B      |
    |       3 | 3C      |
    |       3 | 3D      |
    +---------+---------+

然后运行选择以按评论数降序分组:

> SELECT PAGE_ID,COUNT(*) AS QUANT
  FROM COMMENTS
  GROUP BY PAGE_ID
  ORDER BY 2 DESC, 1 ASC;
    +---------+-------+
    | PAGE_ID | QUANT |
    +---------+-------+
    |       3 |     4 |
    |       1 |     3 |
    |       2 |     2 |
    +---------+-------+

【讨论】:

  • 我没有测试过这个,但它看起来很简单。我认为它会比这更复杂
  • 2 在“order by 2 desc”中做了什么??
  • “2”是序数列说明符,表示选择的第二列 (count(*))。如果你愿意,你可以使用QUANT
猜你喜欢
  • 2020-01-14
  • 2015-09-10
  • 2012-06-23
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 2018-09-19
  • 2019-10-03
  • 1970-01-01
相关资源
最近更新 更多