首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql上交换唯一的主Id?

在mysql上交换唯一的主Id?
EN

Stack Overflow用户
提问于 2011-03-17 00:56:02
回答 4查看 402关注 0票数 1

我得到了一个sql表,其中包含php页面中菜单的数据。

代码语言:javascript
复制
 SELECT * FROM `hizlierisim` ORDER BY id LIMIT 0 , 10

它是由id row.but的命令,我被要求添加管理面板上的顺序控制。所以会有向上和向下按钮来重新排列菜单项。

我想有两种方法可以做到这一点。

一种方法是创建一个名为'order‘的行,并将sql查询更改为:

代码语言:javascript
复制
SELECT * FROM `hizlierisim` ORDER BY `order` LIMIT 0 , 10

我们要移动的列的交换id。并且仍然使用相同的sql:

代码语言:javascript
复制
SELECT * FROM `hizlierisim` ORDER BY id LIMIT 0 , 10

id方法看起来更简单,但我想知道是否有可能在mysql上交换两列的id?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-17 00:59:52

处理主键字段只是为了满足一些任意的排序要求,这不是一个好主意。尤其是在外键情况下。添加一个“order”列(顺便说一句,这是一个保留字,所以如果你想省去一些麻烦的话,可以使用其他列)是一个实用的选择。

票数 5
EN

Stack Overflow用户

发布于 2011-03-17 01:00:04

为这种功能更改PK is是一种非常糟糕的做法;引入一个排序列并使用它进行排序要好得多。显然不要称它为ORDER,因为这是一个保留字...

票数 3
EN

Stack Overflow用户

发布于 2011-03-17 01:02:37

行的id应该是静态的,是记录的永久唯一标识符,这样它就可以作为外键存储在其他地方。

按照您的建议创建"order_id“会更好。这可以改变为任何你喜欢的值,没有副作用,它是用于排序的,更改它只会影响排序。

关于“交换”值,我不知道什么,你只需要自己编写代码。

要么..。

代码语言:javascript
复制
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)

或者像这样..。

代码语言:javascript
复制
UPDATE
  x
SET
  order_id = CASE order_id WHEN 11 then 10 ELSE 11 END
WHERE
  order_id IN (10,11)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5328800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档