2016-11-28 1 views
-3

私はwebアプリケーションを作って、localhost上でそれをテストしました。それを私のサーバーに置き、GROUP BYというクエリでは、コンソールに500 internal server errorという空の画面を出力します。グループby原因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); 

最初のクエリは、別のテーブルからデータを取得する2番目のクエリと同じです。スクリプトを実行すると、500 internal server errorが出力され、GROUP BY questions.question_nameが2番目のクエリから削除されますが、依然として順序が維持されますが、スクリプトは機能しますが、順序が正しく動作しないため、何度も出力されます。

これはどのように可能ですか?私は別の人に見てもらうようにしましたが、誰も何が間違っているのかという手がかりはありません。種類に関しては

、あなたは何の集約を持っていない場合は、別にグループを必要としないのはなぜ

+0

なぜ最初に参加する必要がありますか?ユーザーに関連付けられた質問を制限しない限り、2番目のクエリのユーザーから何かが必要なようには思えません。存在するものがより効率的になるでしょう。集団がない場合、なぜあなたはグループを必要としますか? GROUP BYは、集計がある場合にのみ必要です。重複した質問があり、別個のレコードが必要な場合は、DISTINCTを使用してください。 'SELECT DISTINCT questions.id、questions.question_name FROM 質問INNER JOINのユーザーはusers.question_id = questions.idで質問します。質問:質問 '質問。質問'質問:質問質問 ' – xQbert

+0

500内部エラー原因' $ sth = false'となります。したがって、 'execute();'を実行すると致命的なエラーが発生します。 execをコミントして、あなたのクエリ文字列を全て取り出してください。 'echo 'SELECT users.username FROM users INNER JOINの質問についてusers.question_id = questions.id WHERE question.question_list_pass ="' $ ww '' "GROUP BY users .username ORDER BY users.username''; – Xenofexs

+0

エラーログを確認すると、通常はかなり良い説明が得られます。 –

答えて

0

GROUP BYは、実際には集約が必要な場合にのみ必要です。

なぜ最初に参加する必要がありますか?結合そのものが記録の重複を引き起こしていると思われるので、それを除去することによって、別個の必要性を取り除くことができます。それはあなたがより効率的に行うだろう....ユーザーに関連付けられている質問を制限する場合を除き、2番目のクエリのユーザーから何かが必要なようには思われません。

質問/結果が重複していて別個のレコードが必要な場合は、DISTINCTを使用してください。

相関サブクエリは存在しますが、見た目の重複を引き起こしている結合を削除する方が効率的であるように見えます。あなたは別個のものを追加することができますが、これはまさにクリーナーなようです...ユーザーに特定の追加のwhere句の基準がある場合、または結果にユーザー情報を表示する必要がある場合。異なるものが意味をなさなくなるでしょう。

関連する問題