簡體   English   中英

MySQL 更新有條件的記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM