Сведения о вопросе

CPdeveloper

18:55, 12th August, 2020

Теги

PHP   MySQL    

Поменять местами 2 строки в таблице mysql

Просмотров: 789   Ответов: 10

Всем привет!

Есть таблица, например, с полями Id (int auto_increment) Name

Как с помощью sql запроса поменять местами Id у двух строк?

ЗЫ Хороших выходных :)



  Сведения об ответе

repe

23:56, 13th August, 2020

UPDATE table SET priority=IF(priority=1, 2, 1) WHERE priority IN (1,2) — меняет местами order 1 и 2. order не должно быть уникальным, иначе 3 запроса.


  Сведения об ответе

lats

03:04, 3rd August, 2020

И никто не спросил — а ЗАЧЕМ это нужно? sys-id на то и auto-increment, что выдается sequence-генератором раз и навсегда. Зачем вы хотите это сделать?


  Сведения об ответе

DO__IT

21:38, 15th August, 2020

приоритеты надо ставить с помощью специального поля в таблице, а id а то и id чтобы не нужно было его менять
Просто добавьте еще одно поле в таблицу типа priority и ему выставляйте нужные значения, а в программе у себя вместо ORDER BY id поставьте ORDER BY piority и ваша проблема решится


  Сведения об ответе

P_S_S

09:09, 26th August, 2020

SQL не умеет менять сразу две строки одновременно, значить через третье значение.


  Сведения об ответе

+-*/

12:08, 14th August, 2020

если ld у вас не первичный ключ, но и одинаковых значений не содержит, то должно по идее сработать вот так (пусть нужно поменять местами номера 0 и 1)
UPDATE table SET ld=IF(ld=0, 1, IF(ld=1, 0, ld));


  Сведения об ответе

P_S_S

12:19, 19th August, 2020

Поменяйте сначала id у одной из строк на какой-нибудь другой, потом поменяйте id второй строки на старый id первой строки, а потом поменяйте id первой строки на старый id второй строки.

UPDATE table SET ld=9999999 WHERE id = 1;
UPDATE table SET ld=1 WHERE id = 2;
UPDATE table SET ld=2 WHERE id = 9999999;

При этом собъется значение auto increment для id но его можно ручками поменять на нужный через ALTER TABLE.

Или вам принципиально одним запросом? Думаю что нет.


  Сведения об ответе

VERSUION

19:30, 27th August, 2020

Хороший повод открыть для себя транзакции в СУБД.


  Сведения об ответе

ITSME

23:36, 28th August, 2020

Ок, с этим разобрались, теперь по другому спрошу.

Есть таблица, поле приоритета вынесено в отдельную колонку. Вы хотите поменять приоритет у записей А и Б. Именно поменять местами, засвопить. Вопрос — зачем? Какой бизнес-смысл в такой смене приоритета?


  Сведения об ответе

repe

17:19, 6th August, 2020

Хм. Т.е. вы хотите по сути хранить код в БД? строка кода = строка в таблице в базе? И приоритетты вам нужны, чтобы потом запросом выбирать эти строки так, чтобы они образовывали правильный кусок кода?


  Сведения об ответе

lool

22:33, 7th August, 2020

Допустим, у нас есть таблица участников матчей participants с полями (id, match_id, position).
Необходимо поменять местами участников матча.
Для наглядности добавим в неё поле name, которое хранит исходное сочетание match_id-position
Уникальность установлена по полям match_id+position.

Запрос:
INSERT INTO participants (`id`, `position`, match_id) 
VALUES (4, 0, 2), (3, 2, 2), (4, 1, 2) 
ON DUPLICATE KEY UPDATE `position` = VALUES(`position`)

Результат:
5de39554ce6c5568387039.png
Работает без снятия уникальности, одним запросом!


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться