Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询不工作_Mysql_Group By_Inner Join - Fatal编程技术网

Mysql查询不工作

Mysql查询不工作,mysql,group-by,inner-join,Mysql,Group By,Inner Join,我有三个表的结构如下: 我试图做的是检索某个类别中所有笑话的笑话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.c

我有三个表的结构如下:

我试图做的是检索某个类别中所有笑话的笑话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
");
然而,它没有选择任何笑话


这个问题怎么了?谢谢。

如果其中一个连接无法实现,内部连接将不会返回行。因此,条件
ratings.relative_id=jokedata.id
很可能导致查询返回0个笑话。尝试将
内部联接替换为
左联接
,您将看到有多少
jokedata
行在
评级中没有匹配的
id
。相对id

首先,您可能想使用
AVG()
而不是
SUM()/COUNT()

您的问题是内部联接-如果没有为笑话提交评级,那么该笑话将不会返回,因为只有评级值与内部联接匹配的笑话

我建议改为使用左连接,甚至是子选择。虽然我通常更喜欢
JOIN
s,因为它们通常更快,但我会尝试以下方法:

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

首先,我要缩小问题的范围,去掉除join之外的所有内容,看看结果如何:

挑选* 来自佐克达 ratings.content_type='joke'和ratings.relative_id=jokedata.id上的内部联接评级

如果这给了您结果,那么我将在WHERE标准中添加回去。一步一步地执行此操作,每当您得到一个没有返回行的查询时,请查看前面的结果集,并思考添加其他条件时发生的情况。能够看到这一“中间”结果集将帮助您识别和理解问题

继续逐段添加回查询,直到您开始没有结果为止,至少您已经缩小到查询的哪个方面导致了问题