2012-07-02 34 views
0

我無法使用mysql更新一系列的列。我的總體目標是讓用戶能夠更改列表項目的位置,並讓所有其他列表項目改變位置以適應更改。所以說你有一系列的數字,1-6,你想將位置2的項目移動到位置4,並且每個項目都會對變化進行補償,而每個項目只佔用一個位置編號。我一直在爲此工作了幾個小時,而且我太累了,沒法思考。我仍然是一個mysql的新手,但我幾乎完成了我的第一個CMS,除了這最後一個惱人的消息。在mysql中更新列的範圍

的代碼中的問題是:

$newposition = $_POST['position']; 
$oldposition = $_GET['oldposition']; 
$id = $_GET['id']; 

while ($work = mysql_fetch_array($workset)) { 

if ($newposition>$oldposition) { 
    mysql_query('UPDATE work SET position=position-1 WHERE position<='.$newposition.' AND position>'.$oldposition.''); 
    mysql_query('UPDATE work SET position='.$newposition.' WHERE id='.$id.''); 
} 
elseif 
($newposition<$oldposition) { 
    mysql_query('UPDATE work SET position=position+1 WHERE position<'.$oldposition.' AND position<='.$newposition.''); 
    mysql_query('UPDATE work SET position='.$newposition.' WHERE id='.$id.''); 
} 
elseif 
($newposition==$oldposition) { 
    echo 'same value! '; 
} 
} 

它正確地創建要求的位置變化,但都在範圍內的其他數字得到改變不正確的值。這可能是一個簡單的錯誤..

+0

嘗試輸出您正在生成的SQL,並按照實際執行更新的邏輯進行操作。 – andrewsi

回答

0

所以,我想出了一個任何解決方案感興趣。它不是最乾淨的,但它似乎已經工作了。

if ($newposition>$oldposition) { 
    for ($i=$oldposition+1; $i<=$newposition; $i++) { 
     $workset = mysql_query('SELECT * FROM work WHERE position='.$i.' LIMIT 1', $connection); 
     while ($work = mysql_fetch_array($workset)) { 
      mysql_query('UPDATE work SET position='.$i.'-1 WHERE position='.$i.''); 
      mysql_query('UPDATE work SET position='.$newposition.' WHERE id='.$id.''); 
     } 
    } 
} 
elseif 
($newposition<$oldposition) { 
    for ($i=$oldposition-1; $i>=$newposition; $i--) { 
     $workset = mysql_query('SELECT * FROM work WHERE position='.$i.' LIMIT 1', $connection); 
     while ($work = mysql_fetch_array($workset)) { 
      mysql_query('UPDATE work SET position='.$i.'+1 WHERE position='.$i.''); 
      mysql_query('UPDATE work SET position='.$newposition.' WHERE id='.$id.''); 
     } 
    } 
} 
elseif 
($newposition==$oldposition) { 
} 
0

看到這一行 -

mysql_query('UPDATE work SET position=position+1 WHERE position<'.$oldposition.' AND position<='.$newposition.''); 

確定其是否正確? 我覺得應該是

mysql_query('UPDATE work SET position=position+1 WHERE position > '.$oldposition.' AND position <= '.$newposition.''); 
+0

實際上它應該等於: \t \t mysql_query('UPDATE work SET position = position + 1 WHERE position <'。$ oldposition。'AND position> ='。$ newposition。''); 我想我只是在發佈前改變了它(我不知道爲什麼)。但是,好的電話。但它並沒有解決問題。我已經確定問題與「位置=位置+1」和「位置=位置-1」有關,但我不知道如何解決它。它不會像我期望的那樣從原始位置向上或向下移動,但如果將其更改爲「position = -1」,它會將所有適當的列更改爲「-1」.. –