![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
PriZraK |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.10.2006 Репутация: нет Всего: нет |
Здравствуйте.
Столкнулся с интересной проблемой при выполнении запроса. Проблема заключается в том, что «объединенный» запрос устанавливает неверные данные в переменные @ext и @id_gateway, но выполнив запрос SELECT отдельно, получаю искомые значения. Проблемный запрос:
Вносит обновление в строку ext=5, id_gateway=3:
Если выполнить SELECT отдельно:
, то получим искомые значения:
Структура таблиц и тестовые значения:
Версия MySQL 5.1.61-0. Можно конечно разделить запрос на два и забыть про эту проблему, но хочу разобраться в чем же проблема. Есть предположение, что проблема в ORDER BY. |
||||||||||
|
|||||||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
1) ты сортируешься по date end и берешь первую запись. Если у тебя date_end не уникальна, ты берешь ЛЮБУЮ ПЕРВУЮ ПОПАВШУЮСЯ запись с минимальным date_end.
2) Если ты второй запрос выполняешь после коммита первой транзакции, которая устанавливает этот самый date end и ставит запись по факту в конец списка сортировки, откуда удивление что ты не получаешь этой же записи после повторного выполнения запроса? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
PriZraK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.10.2006 Репутация: нет Всего: нет |
1. Я пробовал использовать уникальное поле `date_end`, результат, к сожалению тот же — разные значения переменных на выходе для START TRANSACTION и для простого SELECT.
2. Оба запроса выполняется для одного и того же слепка базы, т.е. каждый раз данные в таблицы привожу к единому виду, поэтому условия у запросов равные. |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Виновато не равенство дат, а LIMIT. Вернее, непонимание того, как выполняется запрос.
Замените
на
Присвоение выполняется для каждой записи, прошедшей отбор. Выборка в переменную - только после получения выходного набора (обрезки по LIMIT). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
PriZraK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.10.2006 Репутация: нет Всего: нет |
Akina, расцеловать бы тебя! Все получилось!
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |