繁体   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