Sql Обновить значение поля друг с другом

У меня есть таблица SQL следующим образом:

id      position
----------------
1       1
2       2

Теперь я хочу поменять местами позицию id, что означает, что мне нужно o / p следующим образом:

id      position
----------------
1       2
2       1

Итак, я попробовал это:

$update1 = "UPDATE table SET pos=(pos-1) WHERE pos = 2;
$conn->query($update1);

Но проблема в том, что теперь в таблице есть две позиции с одинаковым значением, так как я могу обновить обе позиции друг с другом, как показано выше?

0

Решение

UPDATE example_table
SET position = CASE id
WHEN 1 THEN 2
WHEN 2 THEN 1
END
WHERE id BETWEEN 1 AND 2
2

Другие решения

Если все, что у вас есть, это две строки, то обновление с CASE Выражение должно быть в состоянии справиться с этим:

UPDATE yourTable
SET position = CASE WHEN position = 1 THEN 2 ELSE 1 END
WHERE id IN (1, 2);
1

Опция 1

UPDATE table SET pos = (CASE pos WHEN 1 THEN 2 ELSE 1 END) WHERE pos = 2;

вариант-2

Если значения всегда 0 или 1, вы можете использовать оператор Bitwise Exclusive OR.

UPDATE dbo.Table1 SET col2 = (col2 ^ 1);
0

Может быть, вы должны попробовать команду orderBy в вашем коде. SQL-код

SELECT * FROM YourTable ORDER BY по позиции desc;

в этом случае весь столбец позиции будет перевернут.
Я не знаю php, но я уверен, что вы можете изменить эту команду для вашего использования.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector