Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
Php 如何指定JOIN语句中的位置?_Php_Mysql_Join - Fatal编程技术网

Php 如何指定JOIN语句中的位置?

Php 如何指定JOIN语句中的位置?,php,mysql,join,Php,Mysql,Join,这是我第一次尝试使用JOIN MySQL语句 我有两张桌子……游戏和游戏评分 两个表都有一个id列。id表示游戏的id。我只想得到评级列中整数的平均值,其中games_ratings中的id等于games表中的id 选择a.id、a.name、AVGb.rating作为游戏a中的平均值,按a.id顺序按平均值顺序加入游戏b组DESC LIMIT 50 有什么想法吗?试试这个: SELECT a.id, a.name, AVG(b.rating) AS average FROM game

这是我第一次尝试使用JOIN MySQL语句

我有两张桌子……游戏和游戏评分

两个表都有一个id列。id表示游戏的id。我只想得到评级列中整数的平均值,其中games_ratings中的id等于games表中的id

选择a.id、a.name、AVGb.rating作为游戏a中的平均值,按a.id顺序按平均值顺序加入游戏b组DESC LIMIT 50

有什么想法吗?

试试这个:

SELECT a.id, a.name, AVG(b.rating) AS average 
    FROM games a 
    LEFT JOIN games_ratings b
    ON a.id = b.id # <-- You need this line I believe 
GROUP BY a.id
ORDER BY average DESC LIMIT 50;
编辑:如果没有完整的模式,这有点困难,但是您可以尝试这样的方法

SELECT a.id, a.name, AVG(b.rating) AS average, COUNT( b.id) as votes
    FROM games a 
    LEFT JOIN games_ratings b
    ON a.id = b.id 
GROUP BY a.id
ORDER BY votes DESC, average DESC LIMIT 50; # <-- You may need to modify this line
试试这个:

SELECT a.id, a.name, AVG(b.rating) AS average 
    FROM games a 
    LEFT JOIN games_ratings b
    ON a.id = b.id # <-- You need this line I believe 
GROUP BY a.id
ORDER BY average DESC LIMIT 50;
编辑:如果没有完整的模式,这有点困难,但是您可以尝试这样的方法

SELECT a.id, a.name, AVG(b.rating) AS average, COUNT( b.id) as votes
    FROM games a 
    LEFT JOIN games_ratings b
    ON a.id = b.id 
GROUP BY a.id
ORDER BY votes DESC, average DESC LIMIT 50; # <-- You may need to modify this line

别忘了他要的WHERE条款:

其中,games_ratings中的id等于games表中的id


别忘了他要的WHERE条款:

其中,games_ratings中的id等于games表中的id


成功了!你太棒了。谢谢它不会让我把你的答案标记为正确的…11分钟lol,所以我最终会把它标记为正确的…我刚刚注意到的一件事…你知道如何让它返回多少票吗。然后让它按平均顺序排列……但票数越多,它就越高?因此,我没有一个5星级的投票率高于4.5星级的800投票率的游戏。你可以尝试我刚刚发布的编辑,但是它可能无法100%工作。您可能需要修改它以满足您的需要。就是这样!你太棒了。谢谢它不会让我把你的答案标记为正确的…11分钟lol,所以我最终会把它标记为正确的…我刚刚注意到的一件事…你知道如何让它返回多少票吗。然后让它按平均顺序排列……但票数越多,它就越高?因此,我没有一个5星级的投票率高于4.5星级的800投票率的游戏。你可以尝试我刚刚发布的编辑,但是它可能无法100%工作。您可能需要修改它以满足您的需要。这没有任何意义,WHERE子句不会做任何事情,因为它根本不会改变结果。由于连接,将只返回两个表中id相同的行,添加WHERE子句就像添加WHERE 1=1一样,毫无意义。实际上,现在我看到它,因为它是左连接,可能没有与a.id匹配的b.id,这意味着您的WHERE子句将从结果集中删除这些行。但是,如果这是期望的结果,那么左连接应该成为连接,从而消除了对WHERE子句的需要。如果他/她以不同的方式质疑WHERE,即:WHERE id=6,您将需要它是的,您是正确的。如果OP问了一个不同的问题,我需要一个不同的答案。这没有任何意义,WHERE子句不会做任何事情,因为它根本不会改变结果。由于连接,将只返回两个表中id相同的行,添加WHERE子句就像添加WHERE 1=1一样,毫无意义。实际上,现在我看到它,因为它是左连接,可能没有与a.id匹配的b.id,这意味着您的WHERE子句将从结果集中删除这些行。但是,如果这是期望的结果,那么左连接应该成为连接,从而消除了对WHERE子句的需要。如果他/她以不同的方式质疑WHERE,即:WHERE id=6,您将需要它是的,您是正确的。如果OP问了一个不同的问题,我会需要一个不同的答案。