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

Php SQL从两个表中选择一条记录,然后更新它,php,mysql,sql,Php,Mysql,Sql,我的数据库中有两个表,Users和Staff。我希望这是不言自明的。两个表共有的属性是: |id |参考|名字|姓氏|电子邮件|。。。 在我的user.php文件中,有许多函数用于更新用户帐户的属性。目前它的效率非常低,因为我必须拆分查询以检查用户是否在Users表或Staff表中,然后执行相同的操作以将任何更改推回到我的数据库 我想要一个查询来完成从两个表中查找记录的艰巨工作 //Check the USERS table first $LocateAccount__User

我的数据库中有两个表,Users和Staff。我希望这是不言自明的。两个表共有的属性是:


|id |参考|名字|姓氏|电子邮件|。。。 在我的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:如何在一个查询中在Users或Staff表中找到用户

问题2:然后如何在单个查询中更新这些表中的单个条目上的属性

我正在使用的东西是存在的,但在Sequel Pro中尝试代码时会出错:

假设“Reference”列在两个表中具有唯一的值,您可以使用
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 = ?;

将数据结构更改为单用户表,表中有一列指示
user
staff
是否有一种方法可以不使用?这正是我所寻找的。可能吧,但修复原始错误要比编写代码好得多。好奇地想知道为什么分离数据会有问题?我认为这会更有效,因为staff表的使用率不会达到users表的一半这让你失望
(“选择*FROM staff WHERE Reference='$Account\u Reference';
,如果这是你真正的代码,有两个原因。
也是如此(”选择*FROM Staff WHERE Reference='$Account\u Reference';$LocateAccount\u StaffTable\u Query->execute();
谢谢你,这很管用!但是,我必须手动引用24个单独的列,因为选择*不管用。有没有办法处理IF EXISTS(在users表中)或ELSE IF EXISTS(在Staff表中)