如何从另一个表更新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表,两个表中的字段一样,其中一个表更新的时候,另一个表也会更新,怎样做到呢?