假设我有 3 个 MySQL 表。名为 songs
的歌曲数据库,其中包含歌曲的艺术家、专辑等。这里最主要的是 lastfm_id
,它是歌曲的唯一 id。
然后有一个列表
(有 10 个位置,例如排名前 10 的歌曲)。人们可以通过将歌曲添加到列表中来创建列表,并对它们进行 1 到 10 的排名。实际上不需要为此触及此数据库。
最后,我们有 song_listed
这是人们选择放入列表的歌曲。这里 ti 是:
如您所见,song_listed
中的 song_id
与表 songs
中的 lastfm_id
相同。现在由于数据库中只有一个列表,因此有 10 首歌曲。如果创建了 3 个列表,则 song_listed
中将有 30 行,每行都有自己的排名 1-10。
如何获得列表中每首歌曲在 song_listed
中的平均排名?
假设有一个页面通过 list.php?id=11912
或类似的方式显示列表。
然后,您将从 song_listed
获取歌曲,其中 list_id
为 11912
。
这是我到目前为止得到的:
$listSongs = 0;
while ($listSongs <= 9) {
// Don't worry, I did a query and $songID[x] works.
$songID = $songID[$listSongs]; // ex: 12949331
$getAvgRank = mysql_query("") or die(mysql_error());
}
最佳答案
SELECT song_id, AVG(rank)
FROM song_listed
WHERE song_id in
(SELECT s1.song_id FROM song_listed s1 WHERE s1.list_id = <the id of your list_id>)
GROUP BY song_id
编辑
如果您想要通过 Song_id 发出一个请求(这不是一个好主意,但是)
SELECT AVG(rank)
FROM song_listed
WHERE song_id = $songID[$realArray]
警告:这只是“逻辑”解决方案。使用参数化查询(并阅读 Ben 对 mysql_* 函数的评论)。
关于php - MySQL - 获取每行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281578/