php
  • mysql
  • 2013-10-28 79 views 0 likes 
    0

    我對PHP相當陌生,我知道基礎知識,但不知道如何在PHP中一次更新多行?形式與此類似:通過PHP更新多個MYSQL行

    <form action="sortorder.php" id="sortorder"> 
    
    <input style='width:20px;' type='text' name='photo' value='1'> 
    <input style='width:20px;' type='text' name='sortorder' value='1'> 
    
    <input style='width:20px;' type='text' name='photo' value='2'> 
    <input style='width:20px;' type='text' name='sortorder' value='2'> 
    
    <input style='width:20px;' type='text' name='photo' value='3'>  
    <input style='width:20px;' type='text' name='sortorder' value='3'> 
    
    </form> 
    

    我需要類似的代碼以下適用於每個

    UPDATE photos SET sortorder = <input> WHERE id = '1'; 
    UPDATE photos SET sortorder = <input> WHERE id = '2';  
    

    我只是不知道如何利用動態數據的多個位,並全部更新。有人能指引我朝着正確的方向嗎?我意識到我需要把它們放入一個數組中,但我不知道如何。

    預先感謝您。

    +1

    您提供的示例已損壞,請先嚐試修復它。 – MightyPork

    回答

    0

    比方說你有1,2,3,4。 你可以做這樣的事情:

    UPDATE photos SET sortorder = <yourvalue> WHERE id IN (1,2,3,4); 
    

    現在,而不是明確地寫IN (1,2,3,4)可以動態生成要被更新的值。這可能是通過PHP或通過SQL:

    UPDATE photos SET sortorder = <yourvalue> 
    WHERE id IN 
    (SELECT id from anotherTable WHERE otherattribute = someotherValue); 
    

    你應該注意,只有文本必須' - 數必須不寫!對於你的例子,我假設id是一個數字,而不是文本 - 如果它確實是一個文本(或char/varchar),你需要編寫... IN ('1','2','3','4')。但我會建議你爲你的ID使用整數。

    更新: 爲了讓您輸入具體數值,你可以做到以下幾點:

    <input ... name='photo[]' value='1' /> 
    <input ... name='sortorder[]' value='1' /> 
    

    這樣你會得到兩個數組時,你把你的形式:$_POST[photo]$_POST[sortorder]

    現在通過他們兩人的迭代(對不起,如果語法不正確,沒有使用PHP很長一段時間,但這個想法應該清楚):

    for($i = 0; $i < photo.length; $i++){ 
        // your query here 
        // something like: 
        UPDATE photos SET sortorder = sortorder[i] WHERE id = photo[i]; 
        // of course you have to sanitize your input! 
    } 
    

    正如我說:我我不確定這到底是如何用PHP編寫的,但想法是通過數組並將這些值存入您的查詢中。

    +0

    謝謝 - 我可以問(對不起,如果我聽起來新手),使用我的表格上面,我將如何去動態獲取值?我是否需要方括號sortorder []將結果放入數組中? –

    0

    根據您的查詢

    UPDATE photos SET sortorder = WHERE id = '1'; 
    UPDATE photos SET sortorder = WHERE id = '2'; 
    

    id列是varchar,而不是int,你也沒有指定什麼的排序順序存儲。

    我給的解決方案考慮以下查詢

    UPDATE photos SET sortorder = '1' WHERE id = '1'; 
    UPDATE photos SET sortorder = '2' WHERE id = '2'; 
    

    在這種情況下,你應該詢問,如:

    UPDATE photos SET sortorder = id; 
    

    如果排序順序爲int id是爲varchar那麼查詢應該是

    UPDATE photos SET sortorder = CAST(id as unsigned); 
    

    如果你想更新一些特定的值,那麼它應該像

    UPDATE photos SET sortorder = CAST(id as unsigned) where id in ('1','2','3'); 
    
    0

    它接縫你想插入SQL更有效。但實際上,每次更新id一行將縮短鎖定時間並有助於提高併發能力。另一方面,沒有辦法在一個sql中通過不同的條件更新不同的行。

    相關問題