2017-04-05 138 views
0

我与IDS语法或逻辑错误

1,2,3,4,5,6

列表和本人拖放使得5(个体)之间进1和2(下一个) 1,5,2,3,4,6

所以我需要5 tobe 2(next)-1 and everything < 2(next) - > id = id-1 and everything > 5(self) - > 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.""; 

我得到:所以它只是将5更改为0;

的问题是使用的和WHERE语句 不知道有什么不对劲的地方,但seperately的staments共同努力不是

+0

您绝不应该首先更改ID。 –

+0

和数据库的位置如何改变,然后由html元素实现? – Julian

+0

id字段的属性是什么?它应该是独一无二的吗? –

回答

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.";"; 
+0

mercie。 ich habe den code benutzt,aber wenn ich mein element verschiebe aktualiert der den code und alles ist wie vorher。呃setzt wieder alleszurück。 Woran kann das liegen? – Julian

+0

sry。我不知道我为什么改用德语。代码运行,但其重置,所以没有任何影响的变化。为什么会这样呢? – Julian

+0

也许您错过了'COMMIT;'以确认更改? –

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凯特纳也是对的。但是,我对他的风格很陌生,这很可能是正常的风格,所以他的回答对我来说很难实现.1000有点草率,但逻辑和语法是问题并得到了回答。 1000可以很容易地改变。