2012-03-29 5 views
1

Я пытаюсь вычислить правильный ответ, который получает пользователь, и обновить его в таблице баллов. Но это дает мне небольшую ошибку.Обновление значения из подсчета подзапроса

UPDATE score 
SET end_time = CURTIME(), final_score = COUNT(
    SELECT * 
    FROM answered 
    WHERE (exam_id = 8 and student_login = 'user' and guessed = 1) 
) 
WHERE exam_id = 8 and student_login = 'user' 

Ошибка:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM answered WHERE (exam_id = 8 and student_login = 'user' and gue' at line 3

Это должно быть достаточно просто правильно? Тогда что случилось с этой ошибкой? Выбор работает сам по себе. и обновление работает без обновления final_score.

Спасибо за помощь!

ответ

2
UPDATE score 
SET end_time = CURTIME(), final_score = (
    SELECT COUNT(*) 
    FROM answered 
    WHERE (exam_id = 8 and student_login = 'user' and guessed = 1) 
) 
WHERE exam_id = 8 and student_login = 'user' 

Должно сделать это.

COUNT не может (насколько я знаю) работать с дополнительными запросами.

1

Попробуйте это:

UPDATE score 
SET end_time = CURTIME(), final_score = (
    SELECT COUNT(*) 
    FROM answered 
    WHERE (exam_id = 8 and student_login = 'user' and guessed = 1) 
) 
WHERE exam_id = 8 and student_login = 'user' 
+0

реального времени идентичны ответ :) – innovia

+0

Похоже, правильный ответ тогда! – Chriseyre2000

+0

Точно то же самое, что и мое сообщение за 2 и 5 минут до ..... :) – Corbin

0

попробовать это ..

UPDATE score 
SET end_time = CURTIME(), final_score = (
    SELECT cnt=count(*) 
    FROM answered 
    WHERE (exam_id = 8 and student_login = 'user' and guessed = 1) 
) 
WHERE exam_id = 8 and student_login = 'user'