使用其他查询循环MySQL结果

时间:2015-05-14 15:25:38

标签: php mysql loops mysqli

我希望有人能够帮助我概念化我正在编写的PHP页面的解决方案。

实际上,我在MySQL数据库中有一个名为“Servers”的主表。它有四个领域; 部门 serverA serverB serverC 。对于上下文,department条目是部门的名称,serverA,serverB和serverC对应于每个部门的三个服务器的主机名。

我要做的是获取部门,serverA,serverB和serverC的名称,并使用该数据填充多个SQL查询。我将我的数据分成多个表格以保持清洁和关系。这就是我所拥有的;

<?php
$conn = mysqli_connect("server", "root", "root") or die('Error connecting to MySQLserver.');
mysqli_select_db($conn, "Database") or die("Failed to connect to database");
$sql = "SELECT * FROM Servers";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
    $deptartment = $row['department']
    $serverA = $row['serverA'];
    $serverB = $row['serverB'];
    $serverC = $row['serverC'];
}
} else {
echo "Unable to connect to server.  Please check your settings.";
}
?>

我当时想要做的是做一种 foreach ,其中 foreach 记录服务器A,会发生以下情况;

<?php
$conn = mysqli_connect("server", "root", "root") or die('Error connecting to MySQLserver.');
mysqli_select_db($conn, "Database") or die("Failed to connect to database");
$sql = "SELECT * FROM Data WHERE `serverName` = '$serverA' ORDER BY `timestamp` DESC LIMIT 1";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
    $serverName = $row['serverName'];
    $serverType = $row['serverType'];
    $serverAge = $row['serverAge'];
}
} else {
echo "Unable to connection to server.  Please check your settings.";
}
?>

然后我可以使用相同的理论循环遍历 serverB 的结果,并让serverB的每条记录完成另一个查询以获取其他数据。

我似乎正在努力使用正确的语法来循环遍历每个结果并用它填充其他查询。

任何可能的指导?

谢谢!

Sample Data:
department: Math
serverA: math-server-windows.school.edu
serverB: math-server-mac.school.edu
serverC: math-server-linux.school.edu

department: Psychology
serverA: psychology-server-windows.school.edu
serverB: psychology-server-mac.school.edu
serverC: psychology-server-linux.school.edu

department:  Arts
serverA: artsserver.school.edu
serverB: artsold.school.edu
serverC: artsbackup.school.edu

1 个答案:

答案 0 :(得分:1)

您可以使用JOIN来简化这一过程。

Data的字段servername与服务器表中的serverAserverBserverC相对应。所以你可以像这样运行一个查询:

SELECT Data.*,
  A.serverA AS serverA, 
  B.serverB AS serverB, 
  C.serverC AS serverC 
FROM Data
JOIN servers as A on Data.servername = A.serverA
JOIN servers as B on Data.servername = B.serverB
JOIN servers as C on Data.servername = C.serverC
ORDER BY <whatever>

所以现在每一行都有每个部门的服务器信息,所以循环搜索结果如下:

while( $row = $result->fetch_assoc() ){
  echo "\nDept: ".$row['department'];
  echo "\nA: ".$row['serverA'];
  echo "\nB: ".$row['serverB'];
  echo "\nC: ".$row['serverB'];
}