如果找不到一个,则合并两个SELECT查询

问题描述 投票:0回答:1

我希望将两个选择查询有效地结合到一个查询中并考虑到性能。

我希望第一个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
php mysql select pdo where
1个回答
2
投票

你可以在一个查询中通过组合你的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子句之后唯一剩下的行。如果唯一代码不匹配,那么如果有任何行,则必须在生日那天比赛。

Demo on dbfiddle

© www.soinside.com 2019 - 2024. All rights reserved.