Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > MySQL > START TRANSACTION и @переменные |
Автор: PriZraK 15.2.2013, 13:44 | ||||||||||
Здравствуйте. Столкнулся с интересной проблемой при выполнении запроса. Проблема заключается в том, что «объединенный» запрос устанавливает неверные данные в переменные @ext и @id_gateway, но выполнив запрос SELECT отдельно, получаю искомые значения. Проблемный запрос:
Вносит обновление в строку ext=5, id_gateway=3:
Если выполнить SELECT отдельно:
, то получим искомые значения:
Структура таблиц и тестовые значения:
Версия MySQL 5.1.61-0. Можно конечно разделить запрос на два и забыть про эту проблему, но хочу разобраться в чем же проблема. Есть предположение, что проблема в ORDER BY. |
Автор: Zloxa 15.2.2013, 14:50 |
1) ты сортируешься по date end и берешь первую запись. Если у тебя date_end не уникальна, ты берешь ЛЮБУЮ ПЕРВУЮ ПОПАВШУЮСЯ запись с минимальным date_end. 2) Если ты второй запрос выполняешь после коммита первой транзакции, которая устанавливает этот самый date end и ставит запись по факту в конец списка сортировки, откуда удивление что ты не получаешь этой же записи после повторного выполнения запроса? |
Автор: PriZraK 15.2.2013, 16:04 | ||
1. Я пробовал использовать уникальное поле `date_end`, результат, к сожалению тот же — разные значения переменных на выходе для START TRANSACTION и для простого SELECT.
2. Оба запроса выполняется для одного и того же слепка базы, т.е. каждый раз данные в таблицы привожу к единому виду, поэтому условия у запросов равные. |
Автор: Akina 15.2.2013, 17:11 | ||||
Виновато не равенство дат, а LIMIT. Вернее, непонимание того, как выполняется запрос. Замените
на
Присвоение выполняется для каждой записи, прошедшей отбор. Выборка в переменную - только после получения выходного набора (обрезки по LIMIT). |
Автор: PriZraK 15.2.2013, 17:53 |
Akina, расцеловать бы тебя! Все получилось! |