【发布时间】:2012-02-13 10:17:10
【问题描述】:
我需要在搜索、电影、评论和投票中使用三个表。我想对 Movie.Title 和 Review.Subject 使用 LIKE 函数,并按每场比赛的最高票数对它们进行排序。
Votes 表中有一个 ReviewID、UserID、IsGood。每次用户投票时,都会插入 MovieID、UserID,IsGood 为 1 或 0,1 表示好,0 表示坏。
所以一条评论可能有0好票和坏票,或者5好3坏等。我想按以下顺序显示结果:
评论 1 - 10 好 / 3 坏
评论 2 - 4Good / 3Bad
评论 3 - 0Good / 0Bad
票数最高的比赛在顶部,票数最多的比赛在底部。
这是我写的mysql查询,显然是错误的,但希望有人能帮助我:
mysql_query("
SELECT m.Title, r.Subject, v.ReviewID FROM Movies m
LEFT JOIN Reviews r
ON m.ID=r.MovieID
INNER JOIN Votes v
ON r.ID=v.ReviewID
WHERE (m.Title LIKE '%" . $search . "%'
OR r.Subject LIKE '%" . $search . "%')
ORDER BY MAX(COUNT(v.IsGood='1')) LIMIT 10")or die(mysql_error());
【问题讨论】:
-
你需要在
m.Title, r.Subject, v.TipID上做一个小组,或者做一个子选择来计算收到的票数。 -
感谢 Paul 的回复。你能给我举个例子吗?也许是一个链接?我会搜索你刚才建议的内容。
-
尝试在 ORDER BY 子句之前添加
GROUP BY m.Title, r.Subject, v.TipID,应该可以! -
我刚试了一下,出现“组函数使用无效”的错误...我还将上面的拼写错误从“TipID”更正为“ReviewID”
标签: php mysql search join count