mysql更新中的语法或逻辑错误

时间:2017-04-05 09:09:50

标签: mysql

我有一个包含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;

问题是在何处发表声明 不知道那里有什么不对,但是分开的地方不是一起工作

2 个答案:

答案 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可以很容易地改变。