我有这张桌子:
SELECT * FROM items
id | item | position
---|-----------|----------
1 | USB cable | 0
2 | SD card | 4
3 | Mouse | 2
4 | Keyboard | 0
5 | Monitor | 3
对该表进行排序得到以下结果:
SELECT * FROM items ORDER BY position
id | item | position
---|-----------|----------
4 | Keyboard | 0
1 | USB cable | 0
3 | Mouse | 2
5 | Monitor | 3
2 | SD card | 4
现在我想更新表格并将订单保存在位置列中:
SELECT * FROM items
id | item | position
---|-----------|----------
4 | Keyboard | 1
1 | USB cable | 2
3 | Mouse | 3
5 | Monitor | 4
2 | SD card | 5
这可以通过单个查询来完成,还是我必须手动遍历所有行并进行手动更新?
如果订单没有完全定义(例如上面的 USB 电缆和键盘),我只是随意决定了订单。
注意:“键盘”和“USB 数据线”的顺序是任意的。他们都有位置= 0
要基于项目的抢七位置,请添加辅助排序
如果您有重复的位置,项目对这也将是任意的......
以下是如何在 MySQL 中实现这一点:
我使用了问题中的示例数据,将其加载到笔记本电脑上的 MySQL 5.5.15 中,然后运行了这两行。结果如下: