Возможно, вы могли бы поместить оба запроса в один и получить только первую найденную строку?Примерно так:
$sql = "SELECT BadgeNumber, BadgeName, Active FROM SCANMSTR WHERE BadgeNumber LIKE $query AND Active = 1 AND ExpirationDate >= CURDATE()
UNION
SELECT BadgeNumber, BadgeName, Active FROM SCANMSTR WHERE BadgeNumber LIKE $query and Active = 0 AND Barred = 1 AND Lost = 1
LIMIT 1";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
if ($row) {
if ($row['Active']) {
echo "Badge Number: " .$row["BadgeNumber"]. "- Name: " . $row["BadgeName"]. "<br>";
}
else {
echo "Card not active";
}
}
else {
echo "Not in system";
}
Редактировать Чтобы расширить это до N проверок, вы можете добавить еще
UNION
SELECT ...
строк в $ sql, например
$sql = "SELECT BadgeNumber, BadgeName, Active FROM SCANMSTR WHERE BadgeNumber LIKE $query AND Active = 1 AND ExpirationDate >= CURDATE()
UNION
SELECT BadgeNumber, BadgeName, Active FROM SCANMSTR WHERE BadgeNumber LIKE $query and Active = 0 AND Barred = 1 AND Lost = 1
UNION
SELECT ...
UNION
SELECT ...
...
LIMIT 1";
Из-за LIMIT 1 запрос будет проверять столько запросов SELECT, сколько необходимо для возврата одной строки.Таким образом, даже если несколько SELECT соответствуют человеку (не уверен, возможно ли это / должно быть возможно?), Вы получите первый из них, а не все.
или , вы можете просто получитьстолбцы, необходимые для всех проверок, а затем выполните их в своей бэкэнд-логике:
$sql = "SELECT BadgeNumber, BadgeName, Active, ExpirationDate
FROM SCANMSTR
WHERE BadgeNumber LIKE $query
LIMIT 1";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
if ($row) {
if ($row['Active']) {
echo "Badge Number: " .$row["BadgeNumber"]. "- Name: " . $row["BadgeName"]. "<br>";
}
else if ($row['ExpirationDate'] < date('Y-m-d')) {
echo "Card not active";
}
}
else {
echo "Not in system";
}
Лично я думаю, что я бы сделал это так, он выглядит более чистым, менее повторяющимся SQLи т. д. Оба способа должны работать, хотя:) ..