2017-04-05 1 views
0

私は、IDS構文または論理エラー

1,2,3,4,5,6

のリストを持っていると私はドラッグして、5(セルフ)との間に入るように、そのドロップ1と2(次へ) 1,5,2,3,4,6

私は5つで2(次)-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.""; 

私は:を取得しました。これで、5が0に変更されました。

PROBLEM stamentsが

+0

最初はIDを変更しないでください。 –

+0

そして、データベースの位置が変更され、後でhtml要素によってどのように実装されるのですか? – Julian

+0

idフィールドのプロパティは何ですか?ユニークであると思われますか? –

答えて

0

一緒にいない作業個別にそこ間違って何STATEMENT がわからないTHE OF ANDを使用することですが、これは私たちが望むクエリです:文字列として

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。すべての要素は、すべてのコードが含まれています。それはあなたのすべてのものです。 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 Kttnerも正解でした。しかし、私は彼のスタイルに新しいです、それは正常なものかもしれませんので、彼の答えは私のために実装するのが難しいだろう。1000は少しうっすらですが、論理と構文が質問だったと答えています。 1000は簡単に変更できます。

関連する問題