如何从另一个表更新mysql pdo中的字段[重复]

Posted

技术标签:

【中文标题】如何从另一个表更新mysql pdo中的字段[重复]【英文标题】:how to update a field in mysql pdo from another table [duplicate] 【发布时间】:2017-07-20 21:51:37 【问题描述】:

这不是一个重复的问题。上一个问题与PDO无关。我在 mysql 中有两个表:

USERS
-------------------------------------
employeeid  | name | saving | salary
-------------------------------------
12           | Bob | 100     | 1000
23           | Joe | 50      | 800

USERS table
employeeid
name
saving
salary

和:

EMPLOYEE
-----------------------------------
id   |  managerid  | workerid
-----------------------------------
1    |    12       |  23

EMPLOYEE table
id
managerid FOREIGN KEY
workerid FOREIGN KEY

1-(经理和工人都是雇员)为了更新workerid的保存字段(比如+10美元),字段工资需要更新-$10

2-输入变量来自php形式name,所以逻辑流程是:

name  > find employeeid (id) from USERS > find managerid (id2) from EMPLOYEE > find employeeid (id3) from USERS > update saving and salary

所以单独的sql语句可以写成:

id = SELECT employeeid FROM USERS WHERE name = $name;   //find id of employee in USERS
id2 = SELECT managerid FROM EMPLOYEE WHERE workerid = id; //find id of worker in EMPLOYEE
UPDATE USERS SET saving = saving + 10, salary = salary -10 WHERE employeeid = id2;

是否可以将这 3 个语句合二为一(以 PDO 格式)。 上面的msql PDO格式(用PHP):

$sql = "SELECT employeeid FROM USERS WHERE name=:namepara";
$sttm = prepare($sql);
$sttm->execute(array(":namepara"=>$name));
$row=$sttm->fetch(PDO::FETCH_ASSOC);

$sql2 = "SELECT managerid FROM EMPOYEE WHERE workerid=:idpara";
$sttm2 = prepare($sql2);
$sttm2->execute(array(":idpara"=>$row['employeeid']));
$row2=$sttm2->fetch(PDO::FETCH_ASSOC);

$sql3 = "UPDATE USERS SET saving = saving + 10, salary = salary - 10 WHERE 
   employeeid=:id2para";
$sttm3 = prepare($sql3);
$sttm3->execute(array(":id2para"=>$row2['managerid']));
$row3=$sttm3->fetch(PDO::FETCH_ASSOC);

任何帮助将不胜感激!

【问题讨论】:

您的查询应该类似于UPDATE USERS INNER JOIN EMPLOYEE ON USERS.employeeid = EMPLOYEE.managerid SET saving = saving + 10 , salary = salary - 10 WHERE USERS.name = 'name' 谢谢,您提供的解决方案不是 PDO。我可以进行多次 INNER JOIN,但使用 PDO 有点棘手,或者我不太了解。 【参考方案1】:
$sql = "UPDATE USERS JOIN EMPLOYEE ON USERS.employeeid = EMPLOYEE.managerid 
        SET Saving = saving +10, salary = salary - 10
        WHERE USERS.name = :namepara";

$sttm = prepare($sql);
$sttm->execute(array(":namepara"=>$name));
$row=$sttm->fetch(PDO::FETCH_ASSOC);

【讨论】:

嗨,Naincy。非常感谢您的及时回复。我试过你的代码,我得到了这个错误:SQLSTATE [HY000]:一般错误:1093你不能在FROM子句中指定目标表'USERS'进行更新 我关注了***.com/questions/45494/… 中的帖子,但仍然遇到上述错误。有什么建议吗? @Tempo 修改了我的查询...你能检查更新的答案吗 谢谢。它工作没有给出任何错误。 :) 感谢您的帮助。

以上是关于如何从另一个表更新mysql pdo中的字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从另一个表 MySQL 更新地理信息

mysql 从另一个表更新表

有两个mysql表,两个表中的字段一样,其中一个表更新的时候,另一个表也会更新,怎样做到呢?

MySQL:从另一个表更新一个表中的 id 值

从另一个表的多条记录更新一个表中的一条记录。其中一个表的列名是另一个表的字段

从另一个单独的表行更新一个表行[重复]