尝试在 PHP 中循环访问数组.有没有更好的方法可以做到这一点



所以我有三个表,我正在尝试从中获取数据。

"客户"表订单表和零件表

我正在尝试基本上生成一份报告,显示用户购买了什么以及花费多少。这包括从客户处获取他们的帐户 ID,将其与附加到订单中的订单 ID 的帐户 ID 连接起来,然后在订单中获取部件 ID,附加到订单 ID 并返回部件名称。

我当时的想法是循环访问 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

随后,可以使用以下连接将部件表添加到查询中:

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

按名称排序可以使 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++;
}

相关内容

最新更新