Php 使用foreach获得正确结果的问题
我有以下代码来生成一个包含下订单的HTML表Php 使用foreach获得正确结果的问题,php,indexing,foreach,Php,Indexing,Foreach,我有以下代码来生成一个包含下订单的HTML表 // Select data FROM ORDER & ORDERLINE $id = $value->ID; $datenow = date("Y-m-d"); $temp = 0; $stmt2 = $mysql->prepare("SELECT salesorder.order_id AS soid, salesorder.deli
// Select data FROM ORDER & ORDERLINE
$id = $value->ID;
$datenow = date("Y-m-d");
$temp = 0;
$stmt2 = $mysql->prepare("SELECT salesorder.order_id AS soid, salesorder.delivery_date AS sdd, orderline.qty AS olq, food.food_type AS fft
FROM orderline
INNER JOIN salesorder ON salesorder.order_id = orderline.order_id
INNER JOIN food ON food.food_id = orderline.food_id
WHERE salesorder.client_id=? AND orderline.qty!=?
ORDER BY sdd");
$stmt2->bind_param('ss', $id, $temp);
$stmt2->execute();
$result2 = $stmt2->get_result();
// determen if there are orders to display
if (mysqli_num_rows($result2) > 0) {
while ($value2 = $result2->fetch_object()) {
$results[] = $value2;
}
?>
<table class="center table">
<thead>
<tr>
<th>Order Number</th>
<th>Delivery Date</th>
<th>QTY</th>
<th>Food Type</th>
</tr>
</thead>
<tbody>
<b>Delivered orders :</b> (and orders delivered today...)
<?php foreach ( $results as $result ) : ?>
<?php if (($result->sdd)<=$datenow) { ?>
<td><?php echo ($result->soid); ?></td>
<td><?php echo ($result->sdd); ?></td>
<td><?php echo ($result->olq); ?></td>
<td><?php echo ($result->fft); ?></td>
</tr>
<?php } ?>
<?php endforeach;?>
</tbody>
</table>
//从订单和订单行中选择数据
$id=$value->id;
$datenow=日期(“Y-m-d”);
$temp=0;
$stmt2=$mysql->prepare(“选择salesorder.order\u id作为soid,选择salesorder.delivery\u日期作为sdd,选择orderline.qty作为olq,选择food.food\u类型作为fft
从订单行
salesorder.order\u id=orderline.order\u id上的内部联接salesorder
food.food\u id=orderline.food\u id上的内部连接food
其中salesorder.client_id=?和orderline.qty!=?
由sdd订购);
$stmt2->bind_参数('ss',$id,$temp);
$stmt2->execute();
$result2=$stmt2->get_result();
//确定是否有要展示的命令
如果(mysqli_num_行($result2)>0){
而($value2=$result2->fetch_object()){
$results[]=$value2;
}
?>
订单号
交货日期
数量
食物类型
交付订单:(和今天交付的订单…)
问题是“交货日期”和“订单号”的显示次数与数量和食品类型的显示次数一样多。我知道这与索引有关,但无论我如何尝试,我都找不到正确的语法或方法。有什么想法吗?
我已将数据表添加为图像。请让我知道
foreach的内部
u需要打开
标签mysqli\u fetch\u assoc
返回数组,那么为什么要存储到$results[]
数组中根据您对Eibs另一个答案的评论,请检查以下内容是否满足您的需要。首先,当您循环结果时,我们创建一个按订单号和日期分组的关联数组,并将每个项目添加到项目数组中。然后,当创建表时,我们循环结果数组,然后循环项目数组。I ha我之所以使用单独的行,只是因为您有一个标题行,然而,使用相同的方法,您可以通过多种不同的方式设计表输出
// determen if there are orders to display
if(mysqli_num_rows($result2) > 0)
{
while($value2 = $result2->fetch_object())
{
$key = $value2->soid.'-'.$value2->sdd;
if(!isset($results[$key]))
{
$results[$key] = array(
'soid' => $value2->soid,
'sdd' => $value2->sdd,
'items' => array(),
);
}
$results[$key]['items'][] = $value2;
}
}
?>
<table class="center table">
<thead>
<tr>
<th>Order Number</th>
<th>Delivery Date</th>
<th>QTY</th>
<th>Food Type</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="4"><b>Delivered orders :</b> (and orders delivered today...)</td>
</tr>
<?php foreach($results as $result) : ?>
<?php if($result['sdd'] <= $datenow): ?>
<tr>
<td><?php echo($result['soid']); ?></td>
<td><?php echo($result['sdd']); ?></td>
<td></td>
<td></td>
</tr>
<?php foreach($result['items'] as $item): ?>
<tr>
<td></td>
<td></td>
<td><?php echo($item->olq); ?></td>
<td><?php echo($item->fft); ?></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
</tbody>
</table>
//确定是否有要显示的订单
如果(mysqli_num_行($result2)>0)
{
而($value2=$result2->fetch_object())
{
$key=$value2->soid'-'.$value2->sdd;
如果(!isset($results[$key]))
{
$results[$key]=数组(
“soid”=>$value2->soid,
“sdd”=>$value2->sdd,
'items'=>array(),
);
}
$results[$key]['items'][]=$value2;
}
}
?>
订单号
交货日期
数量
食物类型
交付订单:(和今天交付的订单…)
首先,请停止创建无效的HTML。您不能像那样直接将ab
放入tbody
。“我知道这与索引有关”-不,如果有的话,这与您使用的联接类型无关。内部联接现在可能就是您想要的。您能否提供orderline、salesorder和food三个表的数据示例?我插入了一张这三个表的图片。您尝试检查了哪些问题?为什么不从检查开始SQL查询-复制它,将它粘贴到phpMyAdmin或您使用的任何东西,并检查返回的数据是否是您期望的数据对不起,我的错误,您使用fetch_object()、msyqli_fetch_assoc和fetch_objec()在您的例子中,返回相同的内容:与上面的注释一样,您可以使用fetch_对象返回数组,因此不需要将返回数组推入$results2 arr是的,在ForEachEIBS上使用后,确实加倍了。但我的实际问题仍然是,我在结果中看到,订单号和交货日期也重复了4次,就像我有数量和食品类型一样。结果我想要一个带有订单号、交货日期和n多行数量和食品类型的表根据您的需要,您是否可以在数据库上完美运行?查询结果看起来不错,但它会遍历所有内容,每一行都会给出订单号、日期、数量和食品类型。我想要的是订单号和日期一次,然后数量和食品类型就有一个Hi Mark。这确实起到了作用。非常感谢。我知道这是一个很好的例子索引,但我对PHP还是很熟悉。再次感谢!