SQL从两个表中选择一个记录,然后更新它

时间:2016-03-20 19:57:25

标签: php mysql sql

我的数据库中有两个表,即用户和员工。我希望自我解释。两个表共有的属性是:

| id |参考| First_Name | Last_Name |电子邮件| ...

在我的user.php文件中,有很多功能用于更新用户帐户的属性。目前它的效率非常低,因为我必须拆分查询以检查用户是否在Users表或Staff表中,然后执行相同的操作以将任何更改推送回我的数据库。

我喜欢单个查询来完成从两个表中查找记录的艰苦工作。

    //Check the USERS table first
    $LocateAccount__UsersTable_Query = $CTDatabase->prepare("SELECT * FROM Staff WHERE Reference='$Account_Reference'");
    $LocateAccount__UsersTable_Query-> execute();
    $LocateAccount__UsersTable_Count = $LocateAccount__UsersTable_Query->rowCount();

if ($LocateAccount__UsersTable_Count > 0){
    //Fetch the user's record
    // echo "USER IS USER";
      $Located_Account = $LocateAccount__UsersTable_Query->fetch(); 


  } else {
    //Account not found in USERS table, so check STAFF table
    $LocateAccount__StaffTable_Query = $CTDatabase->prepare("SELECT * FROM Staff WHERE Reference='$Account_Reference'");
    $LocateAccount__StaffTable_Query-> execute();
    $LocateAccount__StaffTable_Count = $LocateAccount__StaffTable_Query->rowCount();

    if ($LocateAccount__StaffTable_Count > 0){
      //Account has been found in the USERS table
      $Located_Account = $LocateAccount__StaffTable_Query->fetch(); 
      //Fetch the STAFF user's record
      // echo "USER IS STAFF";

    } else {
      echo 'An error message goes here..';
    }

问题1:如何在一个查询中的“用户”或“员工”表中找到用户?

问题2:如何在单个查询中对其中一个表中的单个条目更新属性?

我正在研究的东西,使用EXISTS,但在Sequel Pro中尝试代码时遇到错误: SQL Data from One of Two Tables

1 个答案:

答案 0 :(得分:1)

假设'参考'列将在两个表中具有唯一值,您可以使用UNION运算符搜索具有相同值的两个表,例如:

select Reference, first_name, last_name from users where Reference = ?
UNION
select Reference, first_name, last_name from staff where Reference = ?

您还可以使用join更新一个查询中的两个表,例如:

UPDATE users,staff SET table1.col=a,table2.col2=b
WHERE users.reference = ?;