ORDER BY и LIMIT в UPDATE и DELETE

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

ORDER BY и LIMIT в UPDATE и DELETE

Сообщение newartix » 2014.12.10, 15:18

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 » 2014.12.11, 09:49

Query только для SELECT запросов, у него нет методов update и delete.
У QueryBuilder есть методы update и delete, но они возвращают сразу строку и не принимают параметры orderBy и limit.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение zelenin » 2014.12.11, 11:38

newartix писал(а):Query только для SELECT запросов, у него нет методов update и delete.
У QueryBuilder есть методы update и delete, но они возвращают сразу строку и не принимают параметры orderBy и limit.
а, ну да. вы правы.

Аватара пользователя
samdark
Администратор
Сообщения: 8807
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение samdark » 2014.12.11, 14:47

Если не секрет, как это применяется?

newartix
Сообщения: 9
Зарегистрирован: 2014.12.02, 12:54

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение newartix » 2014.12.12, 09:31

Например. Есть таблица с чем-то вроде отложенных задач, есть обработчики этих задач, обработчик сначала помечает задачу своим ключом (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
Администратор
Сообщения: 8807
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение samdark » 2014.12.12, 12:43

Думаю, можно кинуть в трекер на GitHub. Редко, но будет полезно.

lynicidn
Сообщения: 2220
Зарегистрирован: 2014.05.24, 15:12

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение lynicidn » 2014.12.12, 16:31

Sam Dark писал(а):Думаю, можно кинуть в трекер на GitHub. Редко, но будет полезно.
надо тему удалять с пометкой ненужно :roll:

lynicidn
Сообщения: 2220
Зарегистрирован: 2014.05.24, 15:12

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение lynicidn » 2014.12.12, 16:31

разве что limit на update|delete


tar_m
Сообщения: 140
Зарегистрирован: 2012.12.26, 07:37

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение tar_m » 2014.12.18, 08:36

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
Сообщения: 121
Зарегистрирован: 2014.12.24, 16:35

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение rommcr » 2015.07.25, 19:45

Тоже столкнулся с необходимостью построения подобного запроса.
Судя по всему, за 8 месяцев ничего не изменилось..

mkramer
Сообщения: 529
Зарегистрирован: 2014.12.14, 13:02

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение mkramer » 2015.07.29, 17:05

Так товарищи, newartix, tar_m, rommcr, вы же программисты. Если вам часто такая возможность нужна, допишите в фрейсворк и сделайте Pull Request

lgXenos
Сообщения: 238
Зарегистрирован: 2015.11.30, 15:42

Re: ORDER BY и LIMIT в UPDATE и DELETE

Сообщение lgXenos » 2017.12.25, 16:55

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

Ответить