2011-08-12 8 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

그렇게 구문 문제가되지 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

누군가 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') ; 

추 신 : 실제로 테이블 이름에 #이 포함되어 있습니까?

LEFT JOIN `#__jquarks_users_profiles` 
+0

도와 주셔서 감사합니다 GolezTrol, 친절하게 도와 드리겠습니다. 경고 : 잘못된 값 : foreach() – Tony77

+0

쿼리를 출력하는 코드가 잘못되었습니다. 'echo'

'; 에코 "에 완료 점수 점수"; $ row = $ database-> loadRowList(); 의 foreach ($ valuearray 같은 $ 행) { 에코 '", 의 foreach ($ 필드로 $의 valuearray) { 에코 "을"; 을} 는 ""에코; } 에코 "
퀴즈 제목가 최대 답변이없는
$ 필드
을";? >' – Tony77

+0

'score'와'maxScore'이 필드하지만 평가 열 수 없습니다 그들은 WHERE' 절 –