【发布时间】:2019-02-07 19:55:31
【问题描述】:
我正在尝试使用以下查询从一个表中提取数据,但我需要它运行第一个查询并在它得到结果时停止,然后在没有结果时运行第二个查询。每次运行搜索时,我都会得到两个结果,但两个结果之一是回显没有结果。我还计划添加更多查询,以便可以根据需要返回结果。我已经在这个问题上工作了几天,最后我想我会寻求帮助。提前致谢。
$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['Active']) {
echo "徽章编号:" .$row["徽章编号"]。 "- 名称:".$row["BadgeName"]。 "
";
}
其他{
echo "卡无效";
}
如果($行){
if($row['禁止'])
echo "持卡人被禁止";
}
如果($行){
if($row['Lost'])
echo "卡报丢失";
}
}
其他{
echo "不在系统中";
【问题讨论】:
-
将您的第二个移动到您的第一个的
ELSE?在您的else中设置一个变量并在运行第二个语句之前检查该变量?只提交一个 SQL 语句作为两个 sql 语句的 UNION? -
我已经尝试过了,它给了我一个空白页面。它不喜欢它。我还没有尝试过联合,虽然我不知道你可以用同一张桌子联合。我会看看它是否有效。谢谢
-
应该没问题。唯一的约束是列数和列类型在两个结果集之间匹配。 UNION 的好处是它只需访问数据库一次。
-
@JNevill 我添加了一个工会,但没有运气。我删除了标签 $sql 和 $sql1 在两个查询之间添加了 UNION [ALL]。
-
@JNevill 感谢 UNION 的工作,感谢 Torbjorn Stabo 向我展示了正确的语法和位置。