我有一个包含ID的列表
1,2,3,4,5,6
然后我拖放它以使5(自我)在1到2之间(下一个) 1,5,2,3,4,6
所以我需要5 tobe 2(next)-1和所有< 2(下一个) - > id = id-1和一切> 5(自我) - > ID = ID-1
所以我写了sql
$sql = "UPDATE w3school SET id= CASE
WHEN ".$self." > ".$next." THEN id-1
END
WHERE id < ".$next." AND id > ".$self.";";
$sql .="UPDATE w3school SET id= ".$next." - 1 WHERE id = ".$self."";
我得到: 0012346 所以它只是将5改为0;
问题是在何处发表声明 不知道那里有什么不对,但是分开的地方不是一起工作
答案 0 :(得分:0)
这是我们想要的查询:
update w3school
set id = case
when id = 5 then 2 -- change position
when 5 > 2 then i + 1 -- if we move "this" left, then all ids go one place to the right
else id - 1 -- and vice versa
end
where (id >= 2 or id >= 5) -- lower ids than the two in question are irrelevant here
and 2 <> 5; -- if self = next nothing needs be done
作为字符串:
$sql =
" update w3school ".
" set id = case ".
" when id = ".$self." then ".$next." ".
" when ".$self." > ".$next." then i + 1 ".
" else id - 1 ".
" end ".
"where (id >= ".$next." or id >= ".$self.") and ".$next." <> ".$self.";";
答案 1 :(得分:0)
sql方式应该是:
$sql = "UPDATE w3school SET id= 1000 WHERE id = ".$self.";";
$sql .= "UPDATE w3school SET id= id + 1 WHERE id < ".$self." AND id >= ".$next.";";
$sql .= "UPDATE w3school SET id= ".$next." WHERE id = 1000";
我很确定@Thorsten Kttner也是对的。然而,我对他的风格很陌生,这可能是正常的风格,所以他的答案对我来说更难实现.1000有点草率,但逻辑和语法是问题并得到了解答。 1000可以很容易地改变。