ORDER BY и LIMIT в UPDATE и DELETE

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
newartix
Сообщения: 9
Зарегистрирован: 2014.12.02, 12:54

ORDER BY и LIMIT в UPDATE и DELETE

Сообщение newartix »

SQL допускает использование ORDER BY и LIMIT инструкций в UPDATE и DELETE запросах, почему-то не нашёл возможности их задать в db->Command и Query. Приходится писать что-то вроде

Код: Выделить всё

$sql = \Yii::$app->db->createCommand()->update( $table, $fields, $where );
$sql = $sql->getRawSql().' ORDER BY id ASC LIMIT 1';
$res = \Yii::$app->db->createCommand($sql)->execute();
 
newartix
Сообщения: 9
Зарегистрирован: 2014.12.02, 12:54

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение newartix »

Query только для SELECT запросов, у него нет методов update и delete.
У QueryBuilder есть методы update и delete, но они возвращают сразу строку и не принимают параметры orderBy и limit.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение zelenin »

newartix писал(а):Query только для SELECT запросов, у него нет методов update и delete.
У QueryBuilder есть методы update и delete, но они возвращают сразу строку и не принимают параметры orderBy и limit.
а, ну да. вы правы.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение samdark »

Если не секрет, как это применяется?
newartix
Сообщения: 9
Зарегистрирован: 2014.12.02, 12:54

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение newartix »

Например. Есть таблица с чем-то вроде отложенных задач, есть обработчики этих задач, обработчик сначала помечает задачу своим ключом (UPDATE task SET handler_key = 'key' WHERE handler_key IS NULL ORDER BY created_at ASC LIMIT 1), затем выбирает её же (SELECT * FROM task WHERE handler_key = 'key'), гарантированно работает с ней он один.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение samdark »

Думаю, можно кинуть в трекер на GitHub. Редко, но будет полезно.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение lynicidn »

Sam Dark писал(а):Думаю, можно кинуть в трекер на GitHub. Редко, но будет полезно.
надо тему удалять с пометкой ненужно :roll:
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение lynicidn »

разве что limit на update|delete
tar_m
Сообщения: 140
Зарегистрирован: 2012.12.26, 07:37

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение tar_m »

WAT?
UPDATE tbl_agreement_tariff
SET end_datetime = NULL
WHERE id_agreement = @id_agreement
ORDER BY start_datetime DESC LIMIT 1;
SQL Исправления моего планировщика для тестирования, хотя по факту такие запросы могли бы быть реализовны чаще но я их зачем то все реализовал на уровне DB Что не привело к серьезному геморою. Даже незнал что Yii2 Не может этого, в будущем надеюсь все же дойдут руки до реализации
rommcr
Сообщения: 128
Зарегистрирован: 2014.12.24, 16:35

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение rommcr »

Тоже столкнулся с необходимостью построения подобного запроса.
Судя по всему, за 8 месяцев ничего не изменилось..
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение mkramer »

Так товарищи, newartix, tar_m, rommcr, вы же программисты. Если вам часто такая возможность нужна, допишите в фрейсворк и сделайте Pull Request
lgXenos
Сообщения: 243
Зарегистрирован: 2015.11.30, 15:42

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение lgXenos »

rommcr писал(а): 2015.07.25, 19:45 Тоже столкнулся с необходимостью построения подобного запроса.
Судя по всему, за 8 месяцев ничего не изменилось..
И за 3 года - также
Всем обвиняющим в некропостинге - привет. Столкнулся с точно такой же ситуацией как и ТС. Спасибо, что в шапке есть готовый велосипед
mkramer писал(а): 2015.07.29, 17:05 Так товарищи, newartix, tar_m, rommcr, вы же программисты. Если вам часто такая возможность нужна, допишите в фрейсворк и сделайте Pull Request
Ибо вместо того, чтоб сделать плохо - лучше не лезть. Чтоб такое реализовать нужно знать специфику всех поддерживаемых СУБД
Ответить