【发布时间】:2015-07-26 07:04:23
【问题描述】:
我希望有人能够帮助我为我正在编写的 PHP 页面构思一个解决方案。
实际上,我在名为“Servers”的 MySQL 数据库中有一个主表。其中有四个领域; 部门、serverA、serverB、serverC。对于上下文,部门条目是部门的名称,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记录serverA,发生以下情况;
<?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
【问题讨论】:
-
您最好包含您的实际表定义和一些示例数据。
-
什么决定了给定的服务器是a、b还是c
-
对不起,不够清晰!我已经用“服务器”表中的示例更新了我的帖子。上面有一个三行的例子。谢谢!!
-
警告:使用
mysqli时,您应该使用参数化查询和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs。 从不将$_POST数据直接放入查询中。 -
您可以使用
JOIN查询-SELECT * FROM Servers JOIN Data ON Data.serverName = Servers.serverA ORDER BY `timestamp`,而不是在循环中执行循环