Mysql 查询不工作

标签 mysql group-by inner-join

我有三个表,其结构如下: 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/

相关文章:

c# - 使用 Entity Framework 将 MySQL 记录写入数组

MySQL:多行内的 "AND"条件

python - pandas groupby 列并检查组是否满足多个条件

sql - 按星期几和小时对 SQL 进行排序/分组

MySQL使用外键访问父行?

mysql - 如何在Mysql中做time_to_minute?

sql - MySQL 百分比(有点复杂?)

mysql - 限制为 1 的 INNER JOIN

android - 如何在android中使用数据库数据在canvas上绘图

php - 带有内连接的sql查询中的if语句