Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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 分组方式导致500 internel服务器错误_Php_Mysql_Pdo_Left Join_Inner Join - Fatal编程技术网

Php 分组方式导致500 internel服务器错误

Php 分组方式导致500 internel服务器错误,php,mysql,pdo,left-join,inner-join,Php,Mysql,Pdo,Left Join,Inner Join,我制作了一个Web应用程序,在localhost上进行了测试,效果非常好。将它放在我的服务器和GroupBy上,在查询中,它在控制台中输出一个带有500个内部服务器错误的空屏幕 $sth = $db->prepare('SELECT users.username FROM users INNER JOIN questions ON users.question_id=questions.id WHERE questions.question_list_pass = "'.$ww.'"

我制作了一个Web应用程序,在localhost上进行了测试,效果非常好。将它放在我的服务器和GroupBy上,在查询中,它在控制台中输出一个带有500个内部服务器错误的空屏幕

  $sth = $db->prepare('SELECT users.username FROM users INNER JOIN questions ON users.question_id=questions.id  WHERE questions.question_list_pass = "'.$ww.'" GROUP BY users.username ORDER BY users.username');
  $sth->execute();
  $usernames = $sth->fetchAll(PDO::FETCH_ASSOC);

  $sth = $db->prepare('SELECT questions.id, questions.question_name FROM 
questions INNER JOIN users ON users.question_id=questions.id WHERE questions.question_list_pass = "'.$ww.'" GROUP BY questions.question_name ORDER BY questions.question_name');
  $sth->execute();
  $question_names = $sth->fetchAll(PDO::FETCH_ASSOC);
第一个查询与第二个exept相同,用于从不同的表中获取数据。当我运行脚本时,它会输出一个500内部服务器错误,当我从第二个查询中删除GROUP BY questions.question_name,但仍保留order BY时,脚本会工作,但它会多次输出所有内容,因为order BY无法正常工作

你知道这怎么可能吗?我让不同的人看了它,但没有人知道什么是错误的


带着亲切的问候,

如果您没有聚合,为什么需要一个group by?只有在具有聚合的情况下才真正需要GROUP BY


你为什么首先需要加入?连接本身似乎是导致记录重复的原因,因此通过消除它,我们就不需要进行区分。在第二个查询中,您似乎不需要任何来自用户的信息,除非是为了限制与用户相关的问题。。。。这是一种更有效的方法

如果您有重复的问题/结果,并且需要不同的记录,请使用distinct

尽管相关子查询似乎可以更有效地消除导致明显重复的连接,但这种使用仍然存在。您可以添加一个独特的,但这似乎。。。清洁工现在,如果您有特定于用户的其他where子句条件,或者需要在结果中显示用户信息;那么,一个独特的方案可能更有意义

SELECT Q.id, Q.question_name 
FROM questions Q
WHERE Q.question_list_pass = "'.$ww.'" 
  and exists (SELECT 1
              FROM users U 
              WHERE U.Question_ID = Q.Questions_ID)
ORDER BY Q.question_name`

你为什么首先需要加入?在第二个查询中,您似乎不需要任何来自用户的信息,除非是为了限制与用户相关的问题。。。。这是一种更有效的方法。如果没有聚合,为什么需要group by?只有在具有聚合的情况下才真正需要GROUP BY。如果您有重复的问题并且需要不同的记录,请使用distinct。选择DISTINCT questions.id,questions.question\u name FROM questions internal JOIN users ON users.questions\u id=questions.id WHERE questions.question\u list\u pass='.$ww.'ORDER BY questions.question\u name500内部错误原因$sth=false。因此,在执行时出现了致命错误;。请返回exec并获取全部并通过您的查询字符串echo“SELECT users.username FROM users内部加入用户问题。question_id=questions.id WHERE questions.questions_list_pass=”。$ww。“按用户分组。username按用户排序。username';如果你检查你的错误日志,你通常会得到一个很好的解释。我推测你正在使用MySQL,所以我添加了标记。去掉GROUPBY子句。问题解决了。如果希望得到不同的结果,请使用DISTINCT。