数据库表
id serial account speeddialsort dest
107 155 501 1 020341542
115 155 501 2 004407152222
116 155 501 3 00951242454
117 155 501 4 0794245544
118 266 700 1 004465652212
119 266 700 2 0044845482
这是帐户的501快速拨号插槽列表。如果需要,我可以从表单中发送快速拨号排序和dest,然后我可以使用什么sql方法来管理用户对快速拨号订单的编辑。
该顺序将向上或向下移动
speeddialsort dest
#1 020341542
#2 004407152222
#3 00951242454
#4 0794245544
例如,用户选择将快速拨号#3上移。#2和#3的快速拨号排序将需要交换
发布于 2011-08-08 20:40:57
我认为快速拨号排序是唯一的,而dest不是?
要为其提供sort_id的Asume $int_short和要作为该值的$int_previous_sort之前:
INSERT INTO table (speeddialsort, dest)
SELECT speeddialsort, dest
FROM (SELECT {$int_sort} AS speeddialsort, dest
FROM table
WHERE speeddialsort = {$int_previous_sort}
UNION ALL
SELECT {$int_previous_sort}, dest
FROM table
WHERE speeddialsort = {$int_sort})
ON DUPLICATE KEY UPDATE dest = VALUES(dest)
如果两者都是唯一的,那么简单地删除和读取它们会更容易。或者:
INSERT INTO table (speeddialsort, dest)
SELECT speeddialsort, dest
FROM (SELECT {$int_sort} AS speeddialsort, NULL AS dest
UNION ALL
SELECT {$int_previous_sort}, NULL
UNION ALL
SELECT {$int_sort}, dest
FROM table
WHERE speeddialsort = {$int_previous_sort}
UNION ALL
SELECT {$int_previous_sort}, dest
FROM table
WHERE speeddialsort = {$int_sort})
ON DUPLICATE KEY UPDATE dest = VALUES(dest)
应该也行得通。
发布于 2011-08-08 20:55:25
上移:
UPDATE my_table AS t1 SET t1.dest =
IFNULL( ( SELECT t2.dest FROM my_table AS t2
WHERE t2.speeddialsort IN( {$i}, {$i-1} ) AND
t2.account = $account AND t2.dest <> t1.dest ), t1.dest )
WHERE t1.speeddialsort IN( {$i}, {$i-1} ) AND t1.account = {$account}
要将下移,只需将$i-1
%s替换为$i+1
($i是要移动的快速拨号排序,$account是帐户id)
发布于 2012-05-23 13:01:25
我创建了一个表,并使用mysql user defined variable.以连续的顺序生成行序列
ID序列
101 1
103 2
104 3
110 4
将序列号为4的项移动到2
SET @a = 2;
UPDATE tableName SET serial = @a:=@a + 1 WHERE serial >= 2 AND serial < 4
ORDER BY serial DESC;
UPDATE tableName SET serial = 2 WHERE ID = 1;
此查询会将小于4且大于2的所有序列值加1,然后使用值2将序列号4更新为行。
并将第2项移至第4项
SET @b = 4;
UPDATE tableName SET ord = @b:=@b - 1 WHERE serial > 2 AND serial < (4 + 1)
ORDER BY serial DESC;
UPDATE tableName SET serial = 4 WHERE ID = 1 ;
我不是在谈论自动递增,我的情况是我需要以required.So用户的身份对值进行排序,我不能使用Auto Increment.In。
https://stackoverflow.com/questions/6982161
复制相似问题