开发者

mysql query syntax error

I want to pull only the quizzes where the maxscore = score in the below query, can you please tell me what is wrong on the syntax?

$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' .
      开发者_StackOverflow中文版  ' 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) ;


The last part, AND score = maxScore is not put in quotes. This should also be part of your SQL string.

You can easily see this even in the highlighting that is applied to the code in your question, but certainly the highlighter of your editor should reveil it too. Do you use an editor like NetBeans or even 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: Do your table names actually contain a #? Maybe you should use back-quotes around those table names then, like:

LEFT JOIN `#__jquarks_users_profiles`


$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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜