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