2017-03-01 16 views
1

これは重複する質問ではありません。前の質問はPDOとは関係ありません。別のテーブルからmysql pdoのフィールドを更新する方法

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

USERS table 
employeeid 
name 
saving 
salary 

と::私はMySQLで2つのテーブルを持っている

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

EMPLOYEE table 
id 
managerid FOREIGN KEY 
workerid FOREIGN KEY 

1-(管理者と労働者の双方が従業員です)(+ $ 10を言う)workeridのための貯蓄フィールドを更新するために、フィールド給与によって更新する必要 - $ 10

2-入力変数はnameとしてPHPフォームから来るので、論理フローは次のとおり

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; 

は(PDO形式で)1でこれらの3文を行うことが可能です。 (PHPで)上記のmSQLのPDO形式に:

$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); 

任意の助けいただければ幸いです! 10 - あなたのクエリが USERS INNERが USERS.employeeid = EMPLOYEE.managerid SET 省=貯蓄+ 10 、給与=給与に EMPLOYEE を登録しよUPDATE `のようなものでなければなりません

+0

WHERE USERS.name = 'name'' –

+0

ありがとうございます。提供されたソリューションはPDOではありません。私は複数のINNER JOINを行うことができましたが、PDOを使うとややこしい、または私はそれをよく知りません。 – Tempo

答えて

2
$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); 
+0

こんにちはNaincy。迅速な対応をありがとうございます。 SQLSTATE [HY000]:一般的なエラー:1093 FROM句の更新のためのターゲットテーブル 'USERS'を指定することはできません。 – Tempo

+0

私はhttp://stackoverflow.com/questions/の投稿に続きました45494/mysql-error-1093-cant-specified-target-table-for-update-from-clause節では、上記のエラーが発生します。なにか提案を? – Tempo

+0

@Tempo私の質問を修正しました...更新された回答を確認できます – Naincy

関連する問題