У меня есть таблица 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);
Но проблема в том, что теперь в таблице есть две позиции с одинаковым значением, так как я могу обновить обе позиции друг с другом, как показано выше?
UPDATE example_table
SET position = CASE id
WHEN 1 THEN 2
WHEN 2 THEN 1
END
WHERE id BETWEEN 1 AND 2
Если все, что у вас есть, это две строки, то обновление с CASE
Выражение должно быть в состоянии справиться с этим:
UPDATE yourTable
SET position = CASE WHEN position = 1 THEN 2 ELSE 1 END
WHERE id IN (1, 2);
Опция 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);
Может быть, вы должны попробовать команду orderBy в вашем коде. SQL-код
SELECT * FROM YourTable ORDER BY по позиции desc;
в этом случае весь столбец позиции будет перевернут.
Я не знаю php, но я уверен, что вы можете изменить эту команду для вашего использования.