|
Модераторы: skyboy |
|
maxipub |
|
|||
Опытный Профиль Группа: Участник Сообщений: 517 Регистрация: 22.10.2009 Репутация: 1 Всего: 1 |
Здравствуйте!
Есть две таблицы: список складов и список товарных позиций:
Нужно произвести бронирование товарных позиций за заказом (грубо говоря, делалось примерно так: UPDATE mod_store_items AS i SET i.cart_id=$cart_id WHERE i.cart_id=0 LIMIT $order_count). Но появилась необходимость учитывать склад позиций (stock_id), и логика тут такая: 1. В первую очередь бронируем (SET i.cart_id=$cart_id) все, что есть по текущему складу (i.stock_id=$stock_id); 2. Далее (если таких позиций меньше, чем нам нужно - $order_count) бронируем все, что есть в текущем городе (mod_stock_list AS L ... L.stock_city_id=$stock_city_id); 3. И если мы все еще не выбрали $order_count записей для обновления - бронируем любые другие (без приоритетов). Первое что пришло в голову - просто добавить LEFT JOIN mod_stock_list AS L ON L.stock_id=i.stock_id OR L.stock_city_id=$stock_city_id, но очевидно что далее нужно будет использовать сортировку для следования логике бронирования (пункты 1 - 2 - 3). Ведь условия ON/WHERE это просто ограничители, приоритеты они ни как не расставляют. Но MySQL не хочет принимать запрос на UPDATE, в котором больше одной таблицы (даже если обновляется только одна из них), и есть одновременно и ORDER и LIMIT. Так что этот красивый вариант отпал сам собой. Есть другие идеи? Мне пока в голову пришел только велосипед - сделать это через 3 отдельных запроса, и на PHP проверять результаты их выполнения (количество затронутых строк), и выполнять один за другим (с корректировкой LIMIT) до тех пор, пока общее количество обновленных записей не достигнет $order_count. Но это какой-то жуткий велосипед. |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 453 |
Ну собсно обычная сумма с накоплением... я бы использовал пользовательскую переменную при требуемой сортировке, которая для всех складов в указанной сортировке даст резервируемое на этом складе количество. А дальше, если надо, во внешнем запросе отфильтровать нулевые.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |