表
+----+--------+-------------+
| id | song | time_played |
+----+--------+-------------+
| 1 | song_1 | 1510837544 |
| 2 | song_2 | 1510837545 |
| 3 | song_3 | 1510837546 |
| 4 | song_2 | 1510837547 |
| 5 | song_1 | 1510837548 |
| 6 | song_2 | 1510837549 |
+----+--------+-------------+
这样的预期结果
+--------+-------------+-------+
| song | time_played | count |
+--------+-------------+-------+
| song_2 | 1510837549 | 3 |
| song_1 | 1510837548 | 2 |
| song_3 | 1510837546 | 1 |
+--------+-------------+-------+
我正在使用Laravel收音机网站。播放的每首歌曲都存储在名为last_played
的表格中。我们得到了一个名为Top 20的页面,它基本上应该显示前20首最常播放的歌曲以及它们最后播放的时间。
我们使用的查询如下:
$top20 = DB::select(DB::raw('SELECT *,
COUNT(*) AS count FROM last_played
GROUP BY song ORDER BY COUNT(*) DESC LIMIT 20'));
在我们播放歌曲之前,一切顺利。它们按播放次数正确显示,但每首歌曲返回的ID最低。我们希望将所有内容分组并获得最多播放的歌曲数量,并返回该歌曲的最后一个ID。
这里有前20页的链接,你可以看到" Sist spillt / last playing"是第一次播放的歌曲,而不是最后一首。
任何人都知道如何解决这个问题?
答案 0 :(得分:0)
SELECT
song, COUNT(*) AS count, MAX(time_played) AS timeplayed
FROM
song
GROUP BY song
ORDER BY timeplayed DESC, count DESC
LIMIT 20;
我不确定我是否得到了你的问题。但这适用于您当前的示例数据。
答案 1 :(得分:-1)
这应该有效:
SELECT song, COUNT(song) AS count, MAX(time_played) FROM last_played GROUP BY song ORDER BY COUNT(song) DESC LIMIT 0,20