我开发了一个歌曲列表,用户可以在其中投票赞成或不喜欢。我使用cookies编程,允许一个用户一次可以对一首歌进行投票。
现在我想根据喜欢和不喜欢对这些列表进行排序。例如,那首歌更喜欢也不那么讨厌的歌。我对实现这一点的逻辑感到困惑。
如何计算此投票以及如何排序。
答案 0 :(得分:1)
通过执行以下查询可以实现通过喜欢获得排序列表的可能好方法:
SELECT * FROM songs ORDER BY ad_like DESC, ad_dislike ASC;
因此,这将首先按ad_like降序排序,然后使用ad_dislike进一步对其进行排序。
在您提供的图片中,我不认为它已根据喜欢/不喜欢的某些特定偏好进行了分类。你可以看到最喜欢和最不喜欢的歌曲排名第三。实现这种排序的一种可能的排序是按总票数排序,然后按ad_like和ad_dislike进行进一步排序。
SQL Query实现:
SELECT * FROM SONGS
ORDER BY
(ad_like + ad_dislike) DESC,
ad_like DESC,
ad_dislike ASC;
PHP脚本:
<?php
// Replace the variables below with your credentials
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM SONGS ORDER BY
(ad_like + ad_dislike) DESC,
ad_like DESC,
ad_dislike ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
// $row contains your rows, do something with data here.
}
} else {
echo "0 results";
}
$conn->close();
?>
答案 1 :(得分:0)
您将按照&#34;进行排序。在MySQL中的歌曲,并从点数最多的歌曲下降到点数最少的歌曲。
例如:SELECT * FROM songs ORDER BY percent DESC;
您可能还希望每次都添加百分比来计算/更新,并根据已存在的值重新排列。
答案 2 :(得分:0)
对于排名,您可以使用所有投票数的喜欢的商数; SQL查询可以通过:
SELECT *
FROM songs
ORDER BY
CASE WHEN ad_like > 0
THEN ad_like / (ad_like + ad_dislike)
ELSE 0
END DESC
MySQL将进行必要的计算和排序。