Foreach php变量值创建while循环

Foreach php变量值创建while循环,php,mysql,Php,Mysql,我有这样一张满是订单的桌子,每个客户都有多个订单: Customer ponumber quantity .. customer1 234345 56 customer2 343454 34 customer1 w34234 54 customer5 332423 54 我试图循环遍历每个不同的客户,并用以下代码打印相应的订单 <?php include("php/database_connect.php"); $query

我有这样一张满是订单的桌子,每个客户都有多个订单:

Customer   ponumber quantity ..

customer1   234345     56
customer2   343454     34
customer1   w34234     54
customer5   332423     54
我试图循环遍历每个不同的客户,并用以下代码打印相应的订单

<?php

include("php/database_connect.php");

  $query = mysql_query("SELECT DISTINCT customer FROM orders");
  $customer = mysql_fetch_array($query);

foreach($customer as $customers)
{

echo ' <li><h1>'. $customers . '</h1></li>';

$result = mysql_query("SELECT * FROM orders WHERE misc='new' AND customer='$customers'       ORDER BY columnpos ASC ");

while($row = mysql_fetch_array($result))

         {
         echo'  

         <li id="id_' . $row['id'] . '">
         <div class="card">

         <table>
         <tr>
         <td>' . $row['customer'] . '</td>
         <tr>
         <td>P/O: ' . $row['ponumber'] . '</td>
         </tr>
         <tr>
         <td>' . $row['partnumber'] . '</td>
         </tr>
         <tr>
         <td><b>' . $row['quantity'] . '</b> x ' . $row['foil'] . '</td>
         </tr>
         <tr>
         <td>' . $row['daterequired'] . '</td>
         </tr>
         <tr>
         <td>' . $row['prep'] . '</td>
         </tr>
         </table>
        <input class="hiddenid" type="hidden" value="' . $row['id'] . '" />
         <input class="hiddenquantity" type="hidden" value="' .     $row['quantity'] . '" />
         <input class="hiddenpartnumber" type="hidden" value="' .   $row['partnumber'] . '" />
         <input class="hiddenfoil" type="hidden" value="' . $row['foil'] . '" />
         </div>
         </li>


         ';
         }
}
?>
这似乎很奇怪。。。它不是通过每个客户

非常感谢您的帮助

使用

while($customer = mysql_fetch_array($query){
而不是

$customer = mysql_fetch_array($query);

foreach($customer as $customers)
{
使用

而不是

$customer = mysql_fetch_array($query);

foreach($customer as $customers)
{
只进行一次DB查询(性能更好),但在循环查询之前处理结果:

$result = mysql_query("SELECT * FROM orders WHERE misc='new' ORDER BY customer ASC ");

$ordersByCustomer = array(); // nested array. 1. level: customers, 2. level: orders

while(($row = mysql_fetch_assoc($result))) {
    if(!array_key_exists($row['customer'], $ordersByCustomer)) {
        $ordersByCustomer[$row['customer']] = array();
    }
    $ordersByCustomer[$row['customer']][] = $row;
}

foreach($ordersByCustomer as $customer=>$orders) {
    echo ' <li><h1>'. $customer . '</h1></li>';
    foreach($orders as $order) {
        // rest of HTML code
    }
}
$result=mysql\u查询(“按客户ASC从订单中选择*,其中misc='new'订单”);
$ordersByCustomer=array();//嵌套数组。1.级别:客户,2。级别:订单
而($row=mysql\u fetch\u assoc($result))){
如果(!array_key_)存在($row['customer',$ordersByCustomer)){
$ordersByCustomer[$row['customer']]=array();
}
$ordersByCustomer[$row['customer']][]=$row;
}
foreach($ordersByCustomer作为$customer=>$orders){
回显“
  • ”.$customer.
  • ”; foreach($orders作为$order){ //HTML代码的其余部分 } }
    我还鼓励您更好地分离HTML和PHP,就像这样,使用:

    
    
  • 顺便说一句,您没有生成有效的HTML
    li
    元素必须包含在
    ul
    ol
    元素中。

    只进行一次DB查询(性能更好),但在循环之前处理结果:

    $result = mysql_query("SELECT * FROM orders WHERE misc='new' ORDER BY customer ASC ");
    
    $ordersByCustomer = array(); // nested array. 1. level: customers, 2. level: orders
    
    while(($row = mysql_fetch_assoc($result))) {
        if(!array_key_exists($row['customer'], $ordersByCustomer)) {
            $ordersByCustomer[$row['customer']] = array();
        }
        $ordersByCustomer[$row['customer']][] = $row;
    }
    
    foreach($ordersByCustomer as $customer=>$orders) {
        echo ' <li><h1>'. $customer . '</h1></li>';
        foreach($orders as $order) {
            // rest of HTML code
        }
    }
    
    $result=mysql\u查询(“按客户ASC从订单中选择*,其中misc='new'订单”);
    $ordersByCustomer=array();//嵌套数组。1.级别:客户,2。级别:订单
    而($row=mysql\u fetch\u assoc($result))){
    如果(!array_key_)存在($row['customer',$ordersByCustomer)){
    $ordersByCustomer[$row['customer']]=array();
    }
    $ordersByCustomer[$row['customer']][]=$row;
    }
    foreach($ordersByCustomer作为$customer=>$orders){
    回显“
  • ”.$customer.
  • ”; foreach($orders作为$order){ //HTML代码的其余部分 } }
    我还鼓励您更好地分离HTML和PHP,就像这样,使用:

    
    

  • 顺便说一句,您没有生成有效的HTML
    li
    元素必须包含在
    ul
    ol
    元素中。

    谢谢!这解决了我的问题。简单,有效,我应该发现它的。谢谢!这解决了我的问题。简单,有效,我应该发现它。谢谢你的回复。我认为你的操作水平比我高得多,我很难理解这一点。感谢您指出控制结构链接的替代语法,我想知道是否有更好的方法在html中构建php。抱歉,我忘了用
      标记包含其余代码。@Alex:如果您不理解上面代码中的某些内容,请评论并询问我:)1db请求比N+1好,将逻辑与视图分开总是个好主意。啊,我明白了,我在每次while操作后都会发出请求,在那里,我可以对所有内容提出一个请求,然后排序并显示。我现在会研究你的密码…@Alex:我的密码有一个小错误。在最后一个示例中,当然它必须是
      $order['customer']
      ,因为循环是
      foreach($orders as$order)
      …感谢您的回复。我认为你的操作水平比我高得多,我很难理解这一点。感谢您指出控制结构链接的替代语法,我想知道是否有更好的方法在html中构建php。抱歉,我忘了用
        标记包含其余代码。@Alex:如果您不理解上面代码中的某些内容,请评论并询问我:)1db请求比N+1好,将逻辑与视图分开总是个好主意。啊,我明白了,我在每次while操作后都会发出请求,在那里,我可以对所有内容提出一个请求,然后排序并显示。我现在会研究你的密码…@Alex:我的密码有一个小错误。在最后一个示例中,当然它必须是
        $order['customer']
        ,因为循环是
        foreach($orders as$order)
        。。。