[英]MySQL updating records with condition
表 A
id | name | important |
-----------------------
1 Abe 0
2 Ann 1
3 John 1
4 Bill 0
我有一个 id 值的 php 数组
$ids = [1, 4];
如果 id 列值在 $ids 数组中,我想更新表 A 设置重要列等于 1,如果不是,则设置重要列值等于 0。
因此,对于示例,更新后的表将是:
id | name | important |
-----------------------
1 Abe 1
2 Ann 0
3 John 0
4 Bill 1
怎么做?
谢谢你的帮助!
在插入之前首先使数组安全
$ids = array_map('intval', $ids);
然后用一个查询插入
<?php
"UPDATE TableA SET important=1 WHERE id in(" . implode(',',$ids) . ");"
基本上你需要运行下一个查询:
UPDATE TableA SET important = (id IN (1,4));
下面是 php 的实现:
<?php
$ids = [1,4];
//prepare SQL statement with plaseholders
$placeholder = implode(',', array_pad([], count($ids) , '?'));
$sql = "UPDATE TableA SET important = (id IN ($placeholder));";
// run update with ids
$pdo->prepare($sql)->execute($ids);
// Get updated data for check result
$sth = $pdo->prepare("SELECT * FROM TableA");
$sth->execute();
print_r($sth->fetchAll());
在这里您可以测试代码。
我正在使用php pdo
更新 id 值。 及其工作成功。
首先我可以尝试在 1 中更新给定的 id 值。然后尝试在 0 中更新所有 id 值。
所以请试试这个代码。
<?php
//This is a database connection
$host_name = 'localhost';
$db_name = 'stackoverflow';
$user_name = 'root';
$password = '';
$conn = new PDO("mysql:host=$host_name; dbname=$db_name;", $user_name, $password);
$ids = [1, 4]; //This is a id for update value is 1
$sqlforOneVal = "UPDATE important SET important = 1 WHERE id in (".(implode(', ', $ids)).")";
$updateforOne = $conn->prepare($sqlforOneVal);
$updateforOne->execute();
$sqlforZeroVal = "UPDATE important SET important = 0 WHERE id not in (".(implode(', ', $ids)).")";
$updateforZero = $conn->prepare($sqlforZeroVal);
$updateforZero->execute();
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.