MySQIi按计数选择计数和排序

时间:2013-05-05 09:05:11

标签: php mysql sql mysqli

我的表看起来像这样(这只是一个例子):

id    name    title    time
----------------------------
1     name1   title1   1000
2     name1   title1   1001
3     name1   title1   1002
4     name2   title2   1003
5     name2   title2   1004
6     name3   title3   1005
7     name4   title4   1006
8     name4   title4   1007
9     name4   title4   1008
10    name4   title4   1009

我想编写一个SQL语句来选择每个名称的计数以及与之相关的信息。时间实际上是一个UNIX时间戳,但我只是改变了这个问题的简单。

// This is will get me the trending posts for only the last minute
$time_in_past = time() - 60;
$mysqli->query(
    "SELECT COUNT(`id`) FROM `trending`........WHERE `time` < '$time_in_past'"
);

我希望在使用PHP中的while()语句获取后得到结果:

name: name4 count: 4 title: title4
name: name1 count: 3 title: title1
name: name2 count: 2 title: title2
name: name3 count: 1 title: title3

我希望它们按每个COUNT排序,同时仍然得到10个结果(在这个例子中只有4个)。

2 个答案:

答案 0 :(得分:4)

您需要对结果进行分组(按名称),然后再次将结果加入到您的表中:

SELECT * FROM trending NATURAL JOIN (
  SELECT   name, COUNT(*) AS cnt
  FROM     trending
  WHERE    time < ?
  GROUP BY name
) t
WHERE    time < ?
ORDER BY t.cnt DESC

答案 1 :(得分:2)

看起来你可以使用一个简单的GROUP BY,就像这样:

SELECT name, COUNT(*), title
FROM trending
GROUP BY name, title
ORDER BY COUNT(*) DESC;

由于您的nametitle似乎没有区别,因此对这些内容进行分组不会再为您提供任何行。 DESC的排序以相反的顺序为您提供计数。