php
  • mysql
  • 2013-10-28 59 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中通过不同的条件更新不同的行。

    相关问题