[英]Get single row from either of two tables
我有一個供管理員和用戶使用的登錄頁面。 它們都使用相同的表單,並且具有字段 email 和密碼。
除了 admins 表稱為admins
和 users 稱為users
之外,數據庫表是相同的。 email 字段對兩者都是唯一的,例如,如果 email “test@example.com” 在users
表中,它將不在admins
表中。
從兩個表中獲取行、返回該行並檢查它從哪個表中獲取的最佳方法是什么?
聯合、連接、2 個SELECT
查詢,或者其他可以更快、更高效的查詢?
SELECT * FROM admins
UNION
SELECT * FROM users
WHERE email = :email
或者可能有兩個選擇:
$row = SELECT * FROM admins WHERE email = :email LIMIT 1
if(!$row) {
$row = SELECT * FROM users WHERE email = :email LIMIT 1
}
// Then I want to do redirect them according to what type of user they are:
if(row comes from admins table) {
header('Location: /admins');
} else {
header('Location: /users');
}
也許有其他方式?
首先,您應該有一個用戶信息表,並添加一個角色表來區分管理員和普通用戶。 但如果你不能這樣做,有一個解決方案。
SELECT a.* , 'admin' as role FROM admins a
UNION
SELECT u.* , 'user' as role FROM users u
WHERE email = 'abc@email.com'
“角色”列將告訴您從哪個表中獲取值。
當然這會起作用:
$row = 'SELECT * FROM admins WHERE email = :email LIMIT 1';
if(!empty($row) header('Location: /admins');
$row = 'SELECT * FROM users WHERE email = :email LIMIT 1';
if(!empty($row)) header('Location: /users');
顯然你不能只是拿起和放下這段代碼,但它是如何工作的后勤工作就在那里,例如,我不確定你是如何連接到數據庫的,所以我不想預先編寫對您的情況無用的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.