我有一个MySQL表,其中包含属于公司和个人(客户)的电话号码。每个客户可以有多个电话号码,并且他们通常希望按特定顺序列出它们,因此该表具有sequence字段,可以根据他们的喜好对每个客户的电话号码进行排序。这些字段是:


parent_id-字符
sequence-tinyint
area_code-字符串
number-字符串


主键是parent_idsequence的组合。

到目前为止,一切都很好。当我想按顺序向上移动数字或删除数字时,就会出现“问题”。

向上移动数字时,我的操作方式(使用PHP)是将记录的sequence更改为0(客户的第一个电话号码通常为1,为此我仅使用0),然后递增前一个数字的sequence乘以1,然后将原始记录的sequence设置为小于1。换句话说,将sequence与前面的电话号码交换,但是需要三个查询。

删除电话号码时,我会删除该记录,然后必须对该客户的剩余电话号码重新排序,以确保不会丢失sequence。这取决于客户拥有多少个电话号码,但是可以是几个查询。

我想知道是否有更有效的方法。

提前致谢!

最佳答案

UPDATE可以一次影响多个记录;例如:


将序列#4移至#2:

UPDATE my_table SET sequence = CASE
  WHEN sequence = 4 THEN 2
  WHEN sequence < 4 AND sequence >= 2 THEN sequence + 1
END WHERE parent_id = ? AND sequence BETWEEN 2 AND 4;

删除序列#3

DELETE FROM my_table WHERE parent_id = ? AND sequence = 3;

UPDATE my_table
SET    sequence = sequence - 1
WHERE  parent_id = ? AND sequence > 3;



但是,如果(parent_id, sequence)可能会以这种方式更改,则对于使用sequence作为PK应该非常谨慎。定义一个完全合成的PK可能更好。

关于mysql - MySQL中记录的自动排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17893235/

10-11 01:23
查看更多