尝试在PHP中循环遍历数组。有更好的方法吗?

尝试在PHP中循环遍历数组。有更好的方法吗?,php,sql,Php,Sql,所以我有三个表,我正试图从中获取数据 顾客桌 点菜台 还有一张零件表 我试图基本上生成一个报告,显示用户购买了什么以及花费了多少。这包括从客户处获取他们的accountID,将accountID与Orders中附加到OrderID的accountID连接起来,然后在Orders中获取PartID,附加到OrderID,并返回partName 我当时的想法是在一个php数组中循环,使用sql来填充客户名称,然后在其他查询中使用sql按名称对所有内容进行排序。但我不确定这是否是最好的方法,因为当我尝

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

顾客桌 点菜台 还有一张零件表

我试图基本上生成一个报告,显示用户购买了什么以及花费了多少。这包括从客户处获取他们的accountID,将accountID与Orders中附加到OrderID的accountID连接起来,然后在Orders中获取PartID,附加到OrderID,并返回partName

我当时的想法是在一个php数组中循环,使用sql来填充客户名称,然后在其他查询中使用sql按名称对所有内容进行排序。但我不确定这是否是最好的方法,因为当我尝试查询3个表时,内部联接不起作用。以下是我的阵列代码:

$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=“从上的客户内部加入订单中选择firstName”
Customers.accountID=Orders.accountID”;
$statement=$conn->query($sql);
$i=0;
$NameArray=array();
而($Names=$statement->fetch()){
回声“
”; echo$Names[0]; $NameArray[$i]; 回声“
”; $i++; }

这将给出错误的未定义索引。不太清楚为什么实际上$NameArray是空数组

可能您想要的是: $NameArray[$i]=$Names[0];
循环结束时,您将拥有$NameArray中的所有firstName

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

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

Orders.PartID = Parts.PartID

然后只需将Parts.partName添加到选择字段。

我猜您正在运行mysqli

您需要列出customer表和order表的所有表列

现在,为了测试,我为订单表添加了客户和数量的列名。

假设我们要从数据库中选择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/>';
}
?>

什么是
$NameArray[$i]
应该做什么?将数据库中的值存储到数组中您没有将值赋给
$NameArray[$i]
以及什么未定义的索引?可能是未定义的变量NameArray?此代码将为从数据库中获取的每一行存储相同的值(第一个结果)…@JiFus,这似乎不正确。它将存储$Names的第一个元素,该元素可能会在每次fetch()时更改。马塞尔在这里是对的。我不知道否决票是从哪里来的,但我现在正在逆转其中一个。为什么
$I++
在单独的一行上?欢迎来到STACK OVERFLOW$我表示要用于返回的$Names行的字段索引。它将返回第一行的第一个字段,第二行的第二个字段,依此类推。我会重新考虑这个问题。
SELECT Customers.firstName, Orders.Cost, Orders.PartID FROM Customers INNER JOIN Orders ON 
Customers.accountID=Orders.accountID
Orders.PartID = Parts.PartID
<?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;