[英]Trying to loop through an array in PHP. Is there a better way to do this?
所以我有三个表我试图从中获取数据。
客户表 订单表和零件表
我试图基本上生成一个报告,显示用户购买了什么以及它的成本。 这涉及从客户那里获取他们的 accountID,将其与附加到 Orders 中的 OrderID 的 accountID 连接起来,然后获取订单中的 PartID,附加到 orderID,并返回 partName。
我在想的是循环遍历一个 php 数组并使用 sql 用 customerNames 填充它,然后使用 sql 进行其他查询以按名称对所有内容进行排序。 不确定这是否是最好的方法,因为在尝试查询 3 个表时 INNER JOIN 对我不起作用。 这是我的数组代码:
$sql = "SELECT firstName FROM Customers INNER JOIN Orders ON
Customers.accountID=Orders.accountID";
$statement = $conn->query($sql);
$i = 0;
$NameArray = array();
while ($Names = $statement->fetch()) {
echo "<br>";
echo $Names[0];
$NameArray[$i];
echo "<br>";
$i++;
}
这给出了错误未定义的索引。 不太清楚为什么
$sql = "SELECT firstName FROM Customers INNER JOIN Orders ON
Customers.accountID=Orders.accountID";
$statement = $conn->query($sql);
$i = 0;
$NameArray = array(); ***CREATES an empty array
while ($Names = $statement->fetch()) {
echo "<br>";
echo $Names[0];
$NameArray[$i]; ***Should start with 'echo'.
Also, there's nothing assigned to $NameArray[$i]
echo "<br>";
$i++;
}
在上面的代码中,我发现了 2 个问题并记录了它们,但都不能解决您的索引错误。 您仍然必须为 $NameArray[$i] 分配一个值,然后才能在没有索引错误的情况下回显它。
关于查找信息的循环,您可以像这样将 [Cost] 字段添加到 SQL 中:
SELECT Customers.firstName, Orders.Cost, Orders.PartID FROM Customers INNER JOIN Orders ON
Customers.accountID=Orders.accountID
随后您可以使用以下连接将 Parts 表添加到查询中:
Orders.PartID = Parts.PartID
然后只需将 Parts.partName 添加到 SELECT 字段。
我猜你正在运行 mysqli
您需要列出客户和订单表的所有表列。
现在为了测试,我为客户和订单表添加了一个列名。
让我们假设我们要从数据库中选择 Customers.name 和 Orders.quantity
<?php
$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = ""; /* Password */
$dbname = "your-db"; /* Database name */
$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
$query = 'SELECT Customers.accountID, Customers.name, Orders.quantity, Orders.accountID FROM Customers
LEFT JOIN Orders ON Customers.accountID=Orders.accountID
ORDER BY Customers.accountID';
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_assoc($result)){
$order_quantity = $row['quantity'];
$customer_name = $row['name'];
//you can now echo
echo $customer_name.' '.$order_quantity.'<br/>';
}
?>
现在,由于您要生成数组,因此您的代码将如下所示
<?php
$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = ""; /* Password */
$dbname = "your-db"; /* Database name */
$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
$res_arr = array();
$query = 'SELECT Customers.accountID, Customers.name, Orders.quantity, Orders.accountID FROM Customers
LEFT JOIN Orders ON Customers.accountID=Orders.accountID
ORDER BY Customers.accountID';
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_assoc($result)){
$order_quantity = $row['quantity'];
$customer_name = $row['name'];
$res_arr[] = array("customer name" =>$customer_name, "order quqntity" =>$order_quantity);
}
echo json_encode($res_arr);
exit
?>
或者,如果您不希望对结果数组响应进行参数初始化,则可以按照以下操作。
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_array($result)){
$res_arr[] = $row;
}
echo json_encode($res_arr);
exit;
实际上 $NameArray 是一个空数组。
可能你想要这样的东西: $NameArray[$i] = $Names[0]; 在循环结束时,您将拥有 $NameArray 中的所有 firstName(s)
按名称排序可以让mysql更好
$sql = "select firstName
from Customers AS Customers
inner join Orders AS Orders on Customers.accountID = Orders.accountID
GROUP BY Customer.accountID
ORDER BY Customer.firstName";
...
$i=0;
while($Names=$statement->fetch()){
echo $Names[$i];
$i++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.