2017-04-05 115 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可以很容易地改變。