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,就像这样,使用:
顺便说一句,您没有生成有效的HTMLli
元素必须包含在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)
。。。