我的表看起来像这样(这只是一个例子):
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个)。
答案 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;
由于您的name
和title
似乎没有区别,因此对这些内容进行分组不会再为您提供任何行。 DESC
的排序以相反的顺序为您提供计数。