Страница 1 из 1

Запрос UPDATE как реализовать?

Добавлено: 2017.11.29, 01:04
MaxKyivUA
Представим, что есть задача поменять 2 поля местами со 2го на 1е и наоборот.
Вот мы выбираем текущую позицию

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

SELECT pos FROM system_page WHERE id_position = 3 LIMIT 1
и нам вернуло 2. Потом выбираем пред идущую

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

SELECT pos FROM system_page WHERE pos < 2 ORDER BY pos DESC LIMIT 1
соответственно нам пришло 1.
С этим у меня проблем нет не каких :-) А далее надо сделать запрос на UPDATE такого вида:

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

UPDATE system_page SET pos = 2 + 1 - pos WHERE pos IN (2, 1)
Вот у меня вопрос: "Как его сделать? Какой для этого есть класс/метод?"
Спасибо.

Re: Запрос UPDATE как реализовать?

Добавлено: 2017.11.29, 01:21
caHek2x
MaxKyivUA писал(а):
2017.11.29, 01:04
Представим, что есть задача поменять 2 поля местами со 2го на 1е и наоборот.
выберите еще и id первого и второго ... а потом запрос:
UPDATE system_page SET pos = pos + 1 WHERE id = 1
UPDATE system_page SET pos = pos - 1 WHERE id = 2

только причем тут yii2 ? вы с моделями работаете ? или с чистыми запросами ?
MaxKyivUA писал(а):
2017.11.29, 01:04
Представим, что есть задача поменять 2 поля местами со 2го на 1е и наоборот.

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

UPDATE system_page SET pos = 2 + 1 - pos WHERE pos IN (2, 1)
3 - pos это что ? так как я у вас задача ? поменять местами или 3 - pos ?

Re: Запрос UPDATE как реализовать?

Добавлено: 2017.11.29, 01:23
Dominus
Если речь идет о позициях, то существуют готовые решения, например это: https://github.com/yii2tech/ar-position

Re: Запрос UPDATE как реализовать?

Добавлено: 2017.11.29, 13:49
MaxKyivUA
Dominus писал(а):
2017.11.29, 01:23
Если речь идет о позициях, то существуют готовые решения, например это: https://github.com/yii2tech/ar-position
За решение большое спасибо, сейчас читаю как им пользоваться. Судя из того, что пишет автор это именно то, что мне надо :) Сейчас установлю посмотрю на действие и обязательно напишу о результате.

Re: Запрос UPDATE как реализовать?

Добавлено: 2017.11.29, 13:57
MaxKyivUA
caHek2x писал(а):
2017.11.29, 01:21
выберите еще и id первого и второго ... а потом запрос:
UPDATE system_page SET pos = pos + 1 WHERE id = 1
UPDATE system_page SET pos = pos - 1 WHERE id = 2
Вы не внимательно читали или я не особо понятно написал. Там явно видно, что Ид присутствует.
caHek2x писал(а):
2017.11.29, 01:21
только причем тут yii2 ? вы с моделями работаете ? или с чистыми запросами ?
Как это причём, вопрос заключался в том как выполнить на Yii2 UPDATE команда такая в SQL , пускай будет " чистыми запросами "
caHek2x писал(а):
2017.11.29, 01:21
3 - pos это что ? так как я у вас задача ? поменять местами или 3 - pos ?
Да поменять местами, и эта

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

UPDATE system_page SET pos = 2 + 1 - pos WHERE pos IN (2, 1)
команда, меняет местами 2 записи. Затрагивает две строки и меняет в них числа в поле pos местами.

Re: Запрос UPDATE как реализовать?

Добавлено: 2017.11.30, 02:51
MaxKyivUA
Dominus писал(а):
2017.11.29, 01:23
Если речь идет о позициях, то существуют готовые решения, например это: https://github.com/yii2tech/ar-position
Это просто бомба! Всё легко и просто!
Спасибо большое за помощь, да благословит вас Господь!