[英]Set unique value in column and if its not unique move other one down
我對此有疑問。 我需要在event
表中的名為order
列中獲得唯一值。 這件事應該如何表現:例如我有table`event
| id | name | order |
|----|---------|-------|
| 1 | walking | 1 |
| 2 | diving | 2 |
| 3 | skating | 3 |
例如,當我嘗試將skating
順序更新為1
時,
| id | name | order |
|----|---------|-------|
| 3 | skating | 1 |
| 1 | walking | 2 |
| 2 | diving | 3 |
不知道該怎么做,嘗試了一下,但對我不起作用:
Yii::$app->db->createCommand("
SET @rownum :=0;
UPDATE " . self::tableName() . "
LEFT JOIN (
SELECT id, (@rownum := @rownum + 1) AS rowNumber
FROM " . self::tableName() . "
ORDER BY order ASC
) as tmp_table
on tmp_table.id = " . self::tableName() . ".id
SET " . self::tableName() . ".order = tmp_table.rowNumber"
)->execute();
如果您無法理解,請問我,我將盡力解釋所有事情。
您不需要使用用戶變量來重新生成所有訂單,因為您只需向其添加1
,除了移動到位置1
的元素。 因此,您可以使用IF
或CASE
。
UPDATE yourTable
SET `order` = CASE name
WHEN 'skating' THEN 1
ELSE `order` + 1
END
如果您需要將元素移動到1
以外的其他位置,則它會變得更加復雜:
UPDATE yourTable
SET `order` = CASE
WHEN name = 'skating' THEN @newpos
WHEN `order` >= @newpos THEN `order` + 1
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.