php - MySQL - 获取每行的平均值

标签 php mysql math

假设我有 3 个 MySQL 表。名为 songs 的歌曲数据库,其中包含歌曲的艺术家、专辑等。这里最主要的是 lastfm_id,它是歌曲的唯一 id。

然后有一个列表(有 10 个位置,例如排名前 10 的歌曲)。人们可以通过将歌曲添加到列表中来创建列表,并对它们进行 1 到 10 的排名。实际上不需要为此触及此数据库。

最后,我们有 song_listed 这是人们选择放入列表的歌曲。这里 ti 是:

enter image description here

如您所见,song_listed 中的 song_id 与表 songs 中的 lastfm_id 相同。现在由于数据库中只有一个列表,因此有 10 首歌曲。如果创建了 3 个列表,则 song_listed 中将有 30 行,每行都有自己的排名 1-10。

如何获得列表中每首歌曲在 song_listed 中的平均排名?

假设有一个页面通过 list.php?id=11912 或类似的方式显示列表。 然后,您将从 song_listed 获取歌曲,其中 list_id11912

这是我到目前为止得到的:

$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/

相关文章:

math - 如何缩小具有已知最小值和未知最大值的数字范围

java - 在 Java 中使用字节和短数据类型时的处理器使用情况

php - EC2 集群上的 Nginx 扩展和瓶颈识别

php - 如何在redbeanphp中创建具有自定义名称的外键

php - 如何使一个 block (或一个区域)在 Drupal 中 float ?

php - Laravel Eloquent 多重连接

MySQL INSERT INTO 从多个表中选择

python - 斐波那契在 Python 中很奇怪

php - 错误通知 : Constant DB_NAME already defined in

php - 连接表插入和更新分开