Hello我需要从名为"users"的表中选择所有具有特权的用户,1、2和3。之后,我将使用他们的ID在另一个名为"Status"的表中进行新的选择。
<?php
include_once("include/connection.php");
$sql = 'select * from USERS where Privileges != "4"';
$rs = mysqli_query($connect, $sql) or die ("error");
$op = mysqli_num_rows($rs);
while($row = mysqli_fetch_array($rs))
{
$id = $row['ID'];
$name = $row['Name'];
$priv = $row['Privileges'];
$sql = 'select * from Status where ID="$id"';
$result = mysqli_query($connect, $sql) or die ("database error");
$gmon = mysqli_num_rows($result);
$login = $row['Login'];
switch($login)
{
case "ONLINE":
$login = "<font color='"#84FB84'"><strong>".$name."</strong></font>";
break;
case "OFFLINE":
$login = "<font color='"#46AAEB'"><strong>".$name."</strong></font>";
break;
}
$online_adms .= "<td>$login</td>";
}
?>
<?php echo $online_adms; ?>
更新我无法获得"$login"变量的输出。。。如果我尝试输出"$name"或"$id",效果很好。。。但我需要输出"$login"。我想我可以在这里使用一些INNER JOin。。。
有线索吗?
谢谢。
解决方案
$sql = 'SELECT c.Name, c.ID, c.Privileges, d.Login FROM USERS c
INNER JOIN Status d
ON c.ID = d.ID
where Privileges != 4';
您可以使用联接选择所有必需的字段
SELECT `ID`,`Name`,`Privileges`,`Login`
FROM `USERS`
INNER JOIN `Status`
ON `USERS`.`ID` = `Status`.`ID`
WHERE Privileges != 4
然后删除您的第二个查询
如果您刚刚遇到PHP语法错误,您忘记关闭while循环。这是更正后的代码:
$sql = 'select * from USERS where Privileges != "4"';
$rs = mysqli_query($connect, $sql) or die ("error");
$op = mysqli_num_rows($rs);
while($row = mysqli_fetch_array($rs))
{
$id = $row['ID'];
$name = $row['Name'];
$priv = $row['Privileges'];
$sql = 'select * from Status where ID="$id"';
$result = mysqli_query($connect, $sql) or die ("database error");
$gmon = mysqli_num_rows($result);
$login = $row['Login'];
switch($login)
{
case "ONLINE":
$login = "<font color='"#84FB84'"><strong>".$name."</strong></font>";
break;
case "OFFLINE":
$login = "<font color='"#46AAEB'"><strong>".$name."</strong></font>";
break;
default:
$login = 'OOPS! The value of $login is '.$login.' that is why nothing is being printed. :(';
}
}
此外,你可能想改进你的产品线:
$result = mysqli_query($connect, $sql) or die ("database error");
发件人:
$result = mysqli_query($connect, $sql) or die ("database error: ".mysql_error().'<br />query: '.$sql);
基本上,Login列应该在Status表中,但它没有被使用。试试这样的东西:
<?php
include_once("include/connection.php");
$sql = 'SELECT USERS.*, STATUS.* FROM USERS INNER JOIN STATUS ';
$sql .= 'ON USERS.ID=STATUS.ID WHERE USERS.Privileges != "4"';
$rs = mysqli_query($connect, $sql) or die ("error");
$op = mysqli_num_rows($rs);
while($row = mysqli_fetch_array($rs))
{
$id = $row['ID'];
$name = $row['Name'];
$priv = $row['Privileges'];
$login = "<font color='"#46AAEB'"><strong>".$name."</strong></font>";
$loginStatus = $row['Login'];
switch($loginStatus)
{
case "ONLINE":
$login = "<font color='"#84FB84'"><strong>".$name."</strong></font>";
break;
case "OFFLINE":
$login = "<font color='"#46AAEB'"><strong>".$name."</strong></font>";
break;
default:
$login = "<font color='"#999999'"><strong>".$name."</strong></font>";
break;
}
$online_adms .= "<td>$login</td>";
}
?>
<?php echo $online_adms; ?>