基于投票排序列表 - 喜欢和不喜欢PHP

时间:2015-09-22 05:48:28

标签: php mysql

我开发了一个歌曲列表,用户可以在其中投票赞成或不喜欢。我使用cookies编程,允许一个用户一次可以对一首歌进行投票。

现在我想根据喜欢和不喜欢对这些列表进行排序。例如,那首歌更喜欢也不那么讨厌的歌。我对实现这一点的逻辑感到困惑。

任何人都可以为我提供PHP脚本来计算排名 enter image description here

如何计算此投票以及如何排序。

enter image description here

3 个答案:

答案 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将进行必要的计算和排序。