Php 如何在MySQL中按喜欢/不喜欢排序评论
在我的网站上,人们可以对评论竖起或竖起大拇指。 为此,我使用两个表:Php 如何在MySQL中按喜欢/不喜欢排序评论,php,mysql,sql,Php,Mysql,Sql,在我的网站上,人们可以对评论竖起或竖起大拇指。 为此,我使用两个表: $sql = "CREATE TABLE content ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), content TEXT NOT NULL, date date, time time )"; 及 评级中存储的数据如下所示: Comment ID like/dislike user IP 1 l 86.
$sql = "CREATE TABLE content
(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
content TEXT NOT NULL,
date date,
time time
)";
及
评级中存储的数据如下所示:
Comment ID like/dislike user IP
1 l 86.42.173.83
1 d 86.42.173.43
2 l 86.42.173.79
2 l 86.42.173.34
2 d 86.42.173.22
我遇到的问题是,我发现创建一个SQL语句来按评论的喜欢程度排序非常困难
如果有人对如何做到这一点有任何想法,我们将不胜感激。类似的方法会奏效
select content.text, count(*) likes
from content join ratings on content.id = ratings.id
group by context.text
order by likes
如果将like存储为整数而不是字母,则会更容易 我用一个case语句把喜欢的东西加起来,并按注释分组
SELECT C.content,
SUM(CASE WHEN R.rating = 'l' THEN 1 ELSE -1 END) AS overallRating
FROM content C
LEFT JOIN ratings R ON R.id = C.id
GROUP BY C.content
ORDER BY overallRating
你说的每句话都是对的,但是这个问题指定了喜欢的数量,而不是总体评分。@DanBracuk好吧,总体评分是喜欢减去不喜欢的总和。通过从查询中删除
ELSE-1
,它只会将喜欢的加起来,而忽略不喜欢的聪明人!工作得很有魅力!我只是调整它来计算喜欢的数量,而不是整体评分!非常感谢:)
SELECT C.content,
SUM(CASE WHEN R.rating = 'l' THEN 1 ELSE -1 END) AS overallRating
FROM content C
LEFT JOIN ratings R ON R.id = C.id
GROUP BY C.content
ORDER BY overallRating