Как я могу выполнить эти запросы, чтобы они остановились, как только будет найден результат - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь извлечь данные из одной таблицы, используя следующие запросы, но мне нужно, чтобы он выполнил первый запрос и остановился, если он получил результат, а затем выполнил второй запрос, если это не так.Каждый раз, когда я запускаю поиск, я получаю два результата, но один из двух результатов повторяет, что результата нет.Я планирую также добавить больше запросов, чтобы результаты могли быть возвращены по мере необходимости.Я работаю над этой проблемой уже несколько дней и наконец-то подумала, что буду просить о помощи.Заранее спасибо.

$conn = new mysqli("localhost", "user", "password", "dbname");                                                                               
if(!$conn) {                                                                                                                                              
    die("Connection failed: " . mysqli_connect_error());                                                                                                  
}                                                                                                                                                         

//echo $conn->host_info . "\n";                                                                                                                           

$sql = "SELECT * FROM SCANMSTR WHERE BadgeNumber LIKE $query AND Active = 1 AND ExpirationDate >= curdate()";                                             
$result = mysqli_query($conn, $sql);                                                                                                                      

if (mysqli_num_rows($result) > 0) {                                                                                                                       
   while($row = mysqli_fetch_assoc($result)) {                                                                                                            
        echo "Badge Number: " .$row["BadgeNumber"]. "- Name: " . $row["BadgeName"]. "<br>";                                                               
     }                                                                                                                                                    
}                                                                                                                                                         

else  {                                                                                                                                                   
  echo "Not in system1";                                                                                                                                  
}                                                                                                                                                         


$sql1 = "SELECT * FROM SCANMSTR WHERE BadgeNumber LIKE $query and Active = 0 AND Barred = 1 AND Lost = 1";                                                
$result1 = mysqli_query($conn, $sql1);                                                                                                                    

if (mysqli_num_rows($result1) >0) {                                                                                                                       
   while($row1 = mysqli_fetch_assoc($result1)) {                                                                                                          
        echo "Card not active";  }                                                                                                                        
      }                                                                                                                                                   

else {                                                                                                                                                    
   echo "Not in system";

// Недавно добавленный код

$ row = mysqli_fetch_assoc ($ result);
if ($ row) {
if ($ row ['Active']) {
echo "Номер значка:". $ Row ["BadgeNumber"]."- Имя:". $ Row ["BadgeName"]."
";
}
else {
echo "Карта неактивна";
}
if ($ row) {
if ($ row ['Barred'])
echo "Держатель карты заблокирован";
}
if ($ row) {
if ($ row ['Lost'])
echo "Сообщено, что карта потеряна";
}
}
else {
echo "Not in system";

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Возможно, вы могли бы поместить оба запроса в один и получить только первую найденную строку?Примерно так:

$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и т. д. Оба способа должны работать, хотя:) ..

0 голосов
/ 07 февраля 2019

Вы вставляете ваше второе утверждение в первый ELSE вашего первого утверждения следующим образом:

$conn = new mysqli("localhost", "user", "password", "dbname");
if(!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

//echo $conn->host_info . "\n";

$sql = "SELECT * FROM SCANMSTR WHERE BadgeNumber LIKE $query AND Active = 1 AND ExpirationDate >= curdate()";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
   while($row = mysqli_fetch_assoc($result)) {
        echo "Badge Number: " .$row["BadgeNumber"]. "- Name: " . $row["BadgeName"]. "<br>";
     }
}

else  {                                                                                                                                                   
$sql1 = "SELECT * FROM SCANMSTR WHERE BadgeNumber LIKE $query and Active = 0 AND Barred = 1 AND Lost = 1";
$result1 = mysqli_query($conn, $sql1);

if (mysqli_num_rows($result1) >0) {
   while($row1 = mysqli_fetch_assoc($result1)) {
        echo "Card not active";  }
      }

else {
   echo "Not in system";}

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...