2016-07-12 5 views
-2

Попытка получить запрос на работу. У меня есть адрес электронной почты как переменная и вам нужно обновить все строки в этом рейтинге, которые находятся выше соответствующей записи. Запрос:Добавить запрос SELECT в UPDATE?

UPDATE quiz_1_highscore 
    SET rate = rate - 1 
WHERE rate >= (SELECT rate FROM quiz_1_highscore WHERE email = ?) 

Затем я связываю параметр для сообщения электронной почты из формы submit, но запрос не работает.

Я не хочу делать два вызова в базе данных - один для получения ставки в этой строке электронной почты, а второй для выполнения обновления. Могу ли я сделать все это в одном запросе?

EDIT:

Просто пытаюсь добавить Кайюса комментарий:

UPDATE quiz_1_highscore AS T1 SET T1.rate = T1.rate - 1 WHERE T1.rate >= (SELECT MAX(T2.rate) FROM quiz_1_highscore AS T2 WHERE T2.email = ?); 

Эта работа, если я запускаю его в "MySQL workbrench" - но в моих PHP файлов я получаю эту ошибку -

ErrorSQLSTATE[HY000]: General error: 1093 Table 'T1' is specified twice, both as a target for 'UPDATE' and as a separate source for data 

ПОМОГИТЕ: \

+1

Какие СУБД вы используете? –

+2

* но этот запрос не работает *: Как он не работает? Вы получаете сообщение об ошибке, что это такое? И где вы используете SQL? Это не похоже на вопрос SQL. – sstan

+0

Только одна запись должна быть с электронной почтой или несколькими? –

ответ

0

пе sted SELECT statement - это таблица, а не значение. Использовать

(SELECT MAX(rate) FROM quiz_1_highscore WHERE email = ?) 

или какая-либо другая функция агрегации.

UPDATE quiz_1_highscore AS T1 SET T1.rate = T1.rate - 1 WHERE T1.rate >= (SELECT MAX(T2.rate) FROM quiz_1_highscore AS T2 WHERE T2.email = ?); 
+0

Эй, он работает на верстаке, но в php-файле мне это становится исключение: ErrorSQLSTATE [HY000]: Общая ошибка: 1093 Таблица «quiz_1_highscore» указана дважды, как в качестве цели для «UPDATE», так и как отдельный источник данных –

+0

Использование псевдонимов https://technet.microsoft.com/en-us/library/ms187455(v= sql.105) .aspx – Caius

+0

не работает eigther - ErrorSQLSTATE [42S02]: Базовая таблица или просмотр не найдены: 1146 Таблица 'pokerquiz.mytable' не существует –

0

Возможно подзапрос следует ограничить один ряд, добавив: LIMIT 1

+0

Что вы имеете в виду, не понимаете ... –

Смежные вопросы