我正在尝试在表中交换2个记录的列值。 我有一个主键:'recnr'
Recnr File 1 img001.jpg 2 img002.jpg 5 img005.jpg 6 img006.jpg
我希望文件img005.jpg向上移动一个地方:
Recnr File 1 img001.jpg 2 img005.jpg 5 img002.jpg 6 img006.jpg
如何做到这一点?
答案 0 :(得分:2)
您可以添加一个名为weight的整数字段,并将其与ORDER BY子句一起使用。
这将是您的原始数据集:
Recnr | File | weight
1 | img001.jpg | 0
2 | img002.jpg | 0
5 | img005.jpg | 0
6 | img006.jpg | 0
为了让一排更高,你可以减轻重量
Recnr | File | weight
1 | img001.jpg | 0
2 | img002.jpg | -10
5 | img005.jpg | 20
6 | img006.jpg | 0
然后您选择* ORDER BY weight ASC以使最轻的记录显示在顶部。 结果将是
Recnr | File | weight
2 | img002.jpg | -10
1 | img001.jpg | 0
6 | img006.jpg | 0
5 | img005.jpg | 20
答案 1 :(得分:2)
您可以在两个变量中选择两个值,然后更新表:
设置两个变量
SELECT @two:=File FROM mytable WHERE Recnr=2;
SELECT @five:=File FROM mytable WHERE Recnr=5;
更新表格
UPDATE mytable SET File=@five WHERE Recnr=2;
UPDATE mytable SET File=@two WHERE Recnr=5;
答案 2 :(得分:1)
通过调整answer to Swapping column values in MySQL中的方法3,我提出了这个解决方案:
UPDATE your_table t1, your_table t2 SET
t1.File = (@temp:=t1.File),
t1.File = t2.File,
t2.File = @temp
WHERE t1.Recnr = 2 AND t2.Recnr = 5;