簡體   English   中英

從兩個表中的任何一個中獲取單行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM