我得到了一个sql表,其中包含php页面中菜单的数据。
SELECT * FROM `hizlierisim` ORDER BY id LIMIT 0 , 10它是由id row.but的命令,我被要求添加管理面板上的顺序控制。所以会有向上和向下按钮来重新排列菜单项。
我想有两种方法可以做到这一点。
一种方法是创建一个名为'order‘的行,并将sql查询更改为:
SELECT * FROM `hizlierisim` ORDER BY `order` LIMIT 0 , 10或
我们要移动的列的交换id。并且仍然使用相同的sql:
SELECT * FROM `hizlierisim` ORDER BY id LIMIT 0 , 10id方法看起来更简单,但我想知道是否有可能在mysql上交换两列的id?
发布于 2011-03-17 00:59:52
处理主键字段只是为了满足一些任意的排序要求,这不是一个好主意。尤其是在外键情况下。添加一个“order”列(顺便说一句,这是一个保留字,所以如果你想省去一些麻烦的话,可以使用其他列)是一个实用的选择。
发布于 2011-03-17 01:00:04
为这种功能更改PK is是一种非常糟糕的做法;引入一个排序列并使用它进行排序要好得多。显然不要称它为ORDER,因为这是一个保留字...
发布于 2011-03-17 01:02:37
行的id应该是静态的,是记录的永久唯一标识符,这样它就可以作为外键存储在其他地方。
按照您的建议创建"order_id“会更好。这可以改变为任何你喜欢的值,没有副作用,它是用于排序的,更改它只会影响排序。
关于“交换”值,我不知道什么,你只需要自己编写代码。
要么..。
BEGIN TRANSACTION
UPDATE x SET order_id = NULL WHERE order_id = 11
UPDATE x SET order_id = 11 WHERE order_id = 10
UPDATE x SET order_id = 10 WHERE order_id IS NULL
COMMIT TRANSACTION
(or similar)或者像这样..。
UPDATE
x
SET
order_id = CASE order_id WHEN 11 then 10 ELSE 11 END
WHERE
order_id IN (10,11)https://stackoverflow.com/questions/5328800
复制相似问题