在循环中更新sql中的多行

时间:2015-08-28 08:17:24

标签: php mysql foreach

我有多个输入字段,其名称与id相同,其他字段具有其他名称,如

$id = implode(',', $_POST['id']);
$st = implode(',', $_POST['st']);
$sql = "UPDATE table SET st=('$st') WHERE id=('$id')";

在我的sql表中我想改变...也许是id-> 3和id-> 87或者其他10个用来更新“ st ”列的右边的值侧输入字段。来自id和st的键值是相同的。 我知道一行的update-sql语法。但是,如果我想要更多行,我不知道该怎么做

我的理由是使用Jquery Ajax或php Implode(如

   UPDATE table
   SET st = CASE id 
                      WHEN 'id_x' THEN 'st_x' 
                      WHEN 'id_y' THEN 'st_y'
                        ... 
                      ELSE st
                      END
 WHERE id IN('id_x', 'id_y', ...);

然后我从用户peterm

中找到了这个
 @IBAction func refreshButton(sender: AnyObject) {

        textArray.removeAllObjects()

        let predicate = NSPredicate(value: true)
        let query = CKQuery(recordType: "Conversation", predicate: predicate)

        query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]

        publicCloudDatabase?.performQuery(query, inZoneWithID: nil,
            completionHandler: ({results, error in

                if (error != nil) {
                    dispatch_async(dispatch_get_main_queue()) {
                        self.notifyUser("Cloud Access Error",
                            message: error.localizedDescription)
                    }
                } else {
                    if results.count > 0 {
                        var record = results[0] as! CKRecord
                        self.currentRecord = record

                        dispatch_async(dispatch_get_main_queue()) {
                            for x in results{
                                self.textArray.addObject(x.objectForKey("message") as! String)
                                self.tableView.reloadData()
                            }

                        }
                    } else {
                        dispatch_async(dispatch_get_main_queue()) {
                            self.notifyUser("No Match Found",
                                message: "No record matching the address was found")
                        }
                    }
                }
            }))
    }

如何通过我的网站用户自发地进行循环获取(foreach?)

3 个答案:

答案 0 :(得分:2)

我希望它能解决你的问题。您可以使用以下代码:

if(!isset($_POST['id'] || count($_POST['id']) == 0){
    return;
}

foreach($_POST['id'] as $key => $id)){
    $sql = "UPDATE table SET st='{$_POST['st'][$key]}' WHERE id='{$id}'";
}

答案 1 :(得分:0)

$SizeOfID=sizeof($id);

for($i=0;$i<$SizeOfID;$i++)
{
   $IDvalue=$id[$i];
   $STvalue=$st[$i];

   mysql_query("UPDATE table SET st='$STvalue' WHERE id='$IDvalue'");
}

答案 2 :(得分:0)

由于循环,还有另一种更快的方法可以完成它而无需执行多个sql。

但是您必须确保查询的构建方式将使其“命中”现有的唯一键(例如主键),因此它将使用sql的ON DUPLICATE KEY更新其值。

例如:

<?php

$values = [];

foreach( $data as $id => $value ){

    $values[] = "( '".$id."', '".$value."' )";

}

if( (bool)$values ){

   $sql = "INSERT INTO table ( id, st ) VALUES".implode(',',$values)." ON DUPLICATE KEY UPDATE st = VALUES(st)";

   //execute $sql here

}

您当然需要验证-清理数据...常用的东西...