簡體   English   中英

如果找不到一個,則合並兩個SELECT查詢

[英]Combine two SELECT queries IF one is not found

我正在考慮到性能,希望將兩個選擇查詢有效地組合到一個查詢中。

我希望第一個SELECT獲得一行。 如果該行存在,然后再運行其他SELECT查詢。 如果在第一個查詢中確實存在該行,則使用在第一個查詢中找到的行,並且不要從第二個查詢中運行/獲取任何內容。

這是我的兩個查詢:

$stmt = $dbh->prepare("SELECT * FROM users WHERE unique_code = :unique_code LIMIT 1");
$stmt->bindParam(':unique_code', $uniqueCode);
$stmt->execute();
$row = $stmt->fetch();

if(!$row) { // If row does not exist
    $stmt = $dbh->prepare("SELECT * FROM users WHERE birthday = :birthday LIMIT 1");
    $stmt->bindParam(':birthday', $birthday);
    $stmt->execute();
    $row = $stmt->fetch();
}

我怎樣才能做到這一點?

編輯:樣本數據:

id | unique_code | birthday
-----------------------------
 1       123      1987-05-20
 2       456      1955-03-10

您可以通過組合WHERE條件,然后根據匹配的條件進行排序來在一個查詢中執行此操作:

SELECT * 
FROM users 
WHERE unique_code = :unique_code OR birthday = :birthday
ORDER BY unique_code = :unique_code DESC
LIMIT 1

如果唯一代碼匹配,則unique_code = :unique_code將為1,並且由於我們正在對DESCENDING進行排序,因此該行將排在第一位(並且是LIMIT子句之后剩下的唯一行。如果唯一代碼不匹配,則如果他們必須在生日匹配的任何行。

dbfiddle上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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