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" ) ;
精彩评论