分组原因导致500个内部服务器错误

时间:2016-11-28 13:49:20

标签: php mysql pdo left-join inner-join

我做了一个webapplication,在localhost上测试它完美无缺。将它放在我的服务器上,在查询中的GROUP BY上,它会在控制台中输出一个空500 internal server error的空白屏幕。

  $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 internal server error,当我从第二个查询中移除 GROUP BY questions.question_name时(但仍按顺序排列)脚本可以正常工作但它会输出多个次(因为订单不会正常工作)

任何想法如何可能?我让不同的人看着它,但没有人知道什么是不正确的。

亲切的问候,

1 个答案:

答案 0 :(得分:0)

如果没有聚合,为什么还需要一个组?实际上只有在聚合时才需要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`
相关问题