繁体   English   中英

使用多个 WHERE 和 SELECT 条件更新 - MySql

[英]UPDATE with multiple WHERE and SELECT condition - MySql

所以,我有两个表ativoscolaboradores ,它们在我的更新页面上由id_colaborador (FK)链接,我可以更改id_colaborador但不是更改IDwrite the name与该ID匹配write the name ,但我认为我需要多个WHERE条件和SELECT ,有人可以帮我吗? 谢谢! 我有以下代码要更新

$sql = "UPDATE ativos  SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?, 
    numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?, SELECT id_colaborador FROM colaboradores WHERE nome = ? AND WHERE id_ativo = ?";

更新
我已经尝试将这两个语句分开,如下所示:

$sql = "UPDATE ativos  SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?, 
        numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?, id_colaborador = ? WHERE id_ativo = ?";
        $sql2 = "SELECT id_colaborador FROM colaboradores WHERE nome = ?";
        $q = $pdo->prepare($sql,$sql2);

但它给了我以下错误:

警告:PDO::prepare() 期望参数 2 是数组,字符串在 C:\\xampp\\htdocs\\gestao\\Colaboradores\\ativo_update.php 第 120 行中给出

致命错误:未捕获的错误:调用 C:\\xampp\\htdocs\\gestao\\Colaboradores\\ativo_update.php:121 中布尔值的成员函数 execute() 堆栈跟踪:#0 {main} throw in C:\\xampp\\htdocs\\第 121 行上的 gestao\\Colaboradores\\ativo_update.php

您可以使用子查询,因为我知道您想按名称更新不在同一个表中的名称,您可以检查下面的查询:

$sql = "UPDATE ativos  SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?, 
    numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?  WHERE id_colaborador in (SELECT id_colaborador FROM colaboradores WHERE nome = ?) and  id_ativo = ?";

@ADyson 在评论中有解决方案,它也按名称更新 id_colaborador:

$sql = "UPDATE ativos SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?, numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?, id_colabarador = (SELECT id_colaborador FROM colaboradores WHERE nome = ? LIMIT 1) WHERE id_ativo = ?";

此查询将允许您根据从表单输入的名称更新 ativos 表中的 id_colabarador:

$sql = "UPDATE ativos SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?, numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?, id_colabarador = (SELECT id_colaborador FROM colaboradores WHERE nome = ? LIMIT 1) WHERE id_ativo = ?";

但请注意,如果名称在 colabarador 表中不是唯一的,则有可能意外返回错误的 ID。

正如评论中提到的,我强烈建议您重新设计 GUI,以便用户可以使用名称进行选择,但在后台存储与所选记录相关的 ID,以便可以传递 ID直接从表单到 PHP,然后在 SQL 中使用来代替子查询。 这将更加强大,并且不会让您对记录的意外错误识别持开放态度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM