我有三个表,其结构如下: http://i41.tinypic.com/2bt9aq.png
我想要做的是检索特定类别中所有笑话的笑话 ID、标题和平均评分,并按字母顺序对它们进行排序。我有这样的疑问:
$result = mysql_query("
SELECT jokedata.id AS joke_id,
jokedata.joketitle AS joke_title,
SUM(ratings.rating) / COUNT(ratings.rating) AS average
FROM jokedata
INNER JOIN ratings ON ratings.content_type = 'joke' AND ratings.relative_id = jokedata.id
WHERE jokecategory = '$cur_category'
GROUP BY jokedata.id
ORDER BY jokedata.joketitle
LIMIT $offset, $jokes_per_page
");
但是它没有选择任何笑话。
该查询有什么问题?谢谢。
最佳答案
首先,您可能想使用 AVG()
而不是 SUM()/COUNT()
。
您的问题是内部联接 - 如果没有为笑话提交评分,则不会返回该笑话,因为只有评级值与内部联接匹配的笑话。
我建议使用左连接,甚至子选择。虽然我通常更喜欢 JOIN
因为它们通常更快,但我会尝试这样的事情:
SELECT id AS joke_id,
joketitle AS joke_title,
(
SELECT AVG(rating) AS avgrating FROM ratings
WHERE content_type = 'joke' AND relative_id = joke_id
GROUP BY relative_id
) AS average
FROM jokedata
WHERE jokecategory = '$cur_category'
GROUP BY id
ORDER BY joketitle
LIMIT $offset, $jokes_per_page
关于Mysql 查询不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/694252/