2011-08-12 10 views
1

以下のクエリでmaxscore = scoreのクイズのみを取りたいのですが、構文上何が間違っているのか教えてください。mysqlのクエリ構文エラー

$database->setQuery('SELECT distinct qui.title AS name,' . 
     ' (SELECT GROUP_CONCAT(profiles.title) 
       FROM #__jquarks_users_profiles AS users_profiles 
       LEFT JOIN #__jquarks_profiles AS profiles ON users_profiles.profile_id = profiles.id 
       WHERE users_profiles.user_id = sessionWho.user_id) AS profile, ' . 
     ' (SELECT sum(score) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE quizsession_id = quizSession.id 
       AND status <> -1) AS score,' . 
     ' (SELECT count(distinct(question_id)) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE quizsession_id = quizSession.id) AS maxScore,' . 

      ' (SELECT count(id) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE status=-1 
       AND quizsession_id = quizSession.id) AS evaluate,' . 
' quizSession.finished_on,sessionWho.email' .  
     ' FROM #__jquarks_quizsession AS quizSession' . 
     ' LEFT JOIN #__jquarks_users_quizzes AS users_quizzes ON users_quizzes.id = quizSession.affected_id' . 
     ' LEFT JOIN #__jquarks_quizzes AS qui ON users_quizzes.quiz_id = qui.id' . 
     ' LEFT JOIN #__jquarks_quizzes_answersessions AS quizSessAns ON quizSessAns.quizsession_id = quizSession.id' . 
     ' LEFT JOIN #__jquarks_sessionwho AS sessionWho ON sessionWho.session_id = quizSession.id' . 
     ' LEFT JOIN #__jquarks_users_profiles AS users_profiles ON users_profiles.user_id = sessionWho.user_id' . 
' LEFT JOIN #__jquarks_profiles AS profiles ON profiles.id = users_profiles.profile_id '. 

' WHERE sessionWho.user_id =' .$id AND score = maxScore) ; 
+0

:たぶん、あなたは次のように、それらのテーブル名の周りのバック引用符を使用する必要がありますか? – sll

+1

綴りが綴られています。 – GolezTrol

+0

phpmyadminに直接アクセスし、サブクエリを1つずつ確認できますか? – WooDzu

答えて

1
$database->setQuery(
    "SELECT * 
    FROM 
    (SELECT distinct qui.title AS name, 
      (SELECT GROUP_CONCAT(profiles.title) 
       FROM #__jquarks_users_profiles AS users_profiles 
       LEFT JOIN #__jquarks_profiles AS profiles ON users_profiles.profile_id = profiles.id 
       WHERE users_profiles.user_id = sessionWho.user_id) AS profile, 
      (SELECT sum(score) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE quizsession_id = quizSession.id 
       AND status <> -1) AS score, 
      (SELECT count(distinct question_id) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE quizsession_id = quizSession.id) AS maxScore, 
      (SELECT count(id) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE status=-1 
       AND quizsession_id = quizSession.id) AS evaluate, 
      quizSession.finished_on, 
      sessionWho.email  
     FROM #__jquarks_quizsession AS quizSession 
     LEFT JOIN #__jquarks_users_quizzes AS users_quizzes ON users_quizzes.id = quizSession.affected_id 
     LEFT JOIN #__jquarks_quizzes AS qui ON users_quizzes.quiz_id = qui.id 
     LEFT JOIN #__jquarks_quizzes_answersessions AS quizSessAns ON quizSessAns.quizsession_id = quizSession.id 
     LEFT JOIN #__jquarks_sessionwho AS sessionWho ON sessionWho.session_id = quizSession.id 
     LEFT JOIN #__jquarks_users_profiles AS users_profiles ON users_profiles.user_id = sessionWho.user_id 
     LEFT JOIN #__jquarks_profiles AS profiles ON profiles.id = users_profiles.profile_id 
     WHERE sessionWho.user_id = " . $id . 
    ") 
    WHERE score = maxScore") ; 
+0

あなたの出力のおかげで、私は再び.. ..警告:無効な引数がforeach() ' – Tony77

+0

のために提供された誰かがpleae助けてもらえますか? – Tony77

+0

@TonyR:PHPMyAdminでクエリを試したことがありますか?クエリがうまくいけば、PHPコードに問題がある可能性があります。しかし、あなたはそれを投稿していません。あなたの質問を編集し、PHPコードを追加してください。あなたが投稿したコードに 'foreach()'は表示されません。 –

2

最後の部分、AND score = maxScoreは引用符に入れていません。これもSQL文字列の一部である必要があります。

あなたの質問のコードに適用される強調表示でもこれを簡単に見ることができますが、確かにエディタのハイライターもそれを明らかにする必要があります。 NetBeansやNotepad ++のようなエディタを使用していますか?

$database->setQuery('SELECT distinct qui.title AS name,' . 
     ' (SELECT GROUP_CONCAT(profiles.title) 
       FROM #__jquarks_users_profiles AS users_profiles 
       LEFT JOIN #__jquarks_profiles AS profiles ON users_profiles.profile_id = profiles.id 
       WHERE users_profiles.user_id = sessionWho.user_id) AS profile, ' . 
     ' (SELECT sum(score) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE quizsession_id = quizSession.id 
       AND status <> -1) AS score,' . 
     ' (SELECT count(distinct(question_id)) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE quizsession_id = quizSession.id) AS maxScore,' . 

      ' (SELECT count(id) 
       FROM #__jquarks_quizzes_answersessions 
       WHERE status=-1 
       AND quizsession_id = quizSession.id) AS evaluate,' . 
' quizSession.finished_on,sessionWho.email' .  
     ' FROM #__jquarks_quizsession AS quizSession' . 
     ' LEFT JOIN #__jquarks_users_quizzes AS users_quizzes ON users_quizzes.id = quizSession.affected_id' . 
     ' LEFT JOIN #__jquarks_quizzes AS qui ON users_quizzes.quiz_id = qui.id' . 
     ' LEFT JOIN #__jquarks_quizzes_answersessions AS quizSessAns ON quizSessAns.quizsession_id = quizSession.id' . 
     ' LEFT JOIN #__jquarks_sessionwho AS sessionWho ON sessionWho.session_id = quizSession.id' . 
     ' LEFT JOIN #__jquarks_users_profiles AS users_profiles ON users_profiles.user_id = sessionWho.user_id' . 
' LEFT JOIN #__jquarks_profiles AS profiles ON profiles.id = users_profiles.profile_id '. 

' WHERE sessionWho.user_id =' .$id . ' AND score = maxScore') ; 

PS:実際にテーブル名には#が含まれていますか?その構文の問題ではないSQLクエリ自体がある

LEFT JOIN `#__jquarks_users_profiles` 
+0

助けてくれてありがとうGolezTrol、親切に助けてくれました:警告:無効な引数がforeach() – Tony77

+0

コードを出力します: 'echo '

'; エコー "で仕上げたスコアスコア"。 $ row = $ database-> loadRowList(); foreachの($ valuearrayとして$行) { エコー ''; foreachの($フィールドとして$のvaluearray) { エコー "​​$フィールドを"; を} は "を "エコー; } エコー"
クイズタイトルが最大未回答の
";? は > ' – Tony77

+0

' score'と 'maxScore'はフィールドではなく、列を評価され、彼らは' WHERE'句に入れることができない –