2011-08-12 148 views
1

我想拉只有在下面的查询maxscore =分数的测验,请告诉我什么是错误的语法?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

所以有语法问题,不是一个SQL查询本身? – sll

+1

拼写语法。 – GolezTrol

+0

你可以直接去phpmyadmin并逐个检查子查询吗? – 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

有人可以帮助吗? – 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:你的表名实际上是否包含#?也许你应该使用围绕这些表名反引号,然后,像:

LEFT JOIN `#__jquarks_users_profiles` 
+0

感谢您的帮助GolezTrol,会好心帮助,现在我得到和错误说明:警告:为foreach提供的无效参数() – Tony77

+0

输出查询的代码:'echo'

'; 回声 “”; $ row = $ database-> loadRowList(); 的foreach($行作为$ valuearray) { 回波 ''; 的foreach($ valuearray为$场) { 回声“​​$字段”; } 回声 “ ”; } 回声“
测验题目分数最大得分未答复的完成了
”; >'' – Tony77

+0

和score''maxScore'不是字段,但评估列,他们不能在'WHERE'条款 –