我使用此查询从3个不同的表中获取数据。
$sql = "SELECT * FROM locatie_regel
INNER JOIN locatie ON locatie_regel.locatie_id = locatie.locatie_id
INNER JOIN product ON locatie_regel.product_id = product.product_id";
$query = $pdo->query($sql);
$results = $query->fetchAll(PDO::FETCH_OBJ);
现在返回7个对象。我希望这些对象作为html表中的行。我是这样做的:
<?php
foreach ($results as $result) {
?>
<tr>
<td><?php echo $result->product_id; ?></td>
<td><?php echo $result->product; ?></td>
<td><?php echo $result->type; ?></td>
<td><?php if($result->locatie_id == 1){ echo $result->aantal; }else{ echo ''; } ?></td>
<td><?php if($result->locatie_id == 2){ echo $result->aantal; }else{ echo ''; } ?></td>
<td><?php if($result->locatie_id == 3){ echo $result->aantal; }else{ echo ''; } ?></td>
</tr>
<?php
}
?>
一切正常,但是当你看输出时:
这正是我上面所做的,但我想要实现的是每个产品ID只有一行。我一直试图找到一个解决方案几个小时,但我没有找到任何解决方案。
我可能正在努力思考这个问题,我想我应该使用另一个查询或其他东西,但如果有人能帮我解决这个问题会很好。
提前致谢!
答案 0 :(得分:2)
我认为它能满足您的要求。您的数据库具有单独的位置条目,这就是您在表中获取单独行的原因。您可以更改架构,以便在产品表中有三个字段,一个用于每个位置的信息,或者修改代码以处理它。
修复代码的可能性是:
<?php
$product_id = NULL;
foreach ($results as $result) {
if( $result->product_id != $product_id ) {
if( !is_null( $product_id ) ) {
?>
<tr>
<td><?php echo $product_id; ?></td>
<td><?php echo $product; ?></td>
<td><?php echo $type; ?></td>
<td><?php echo $locate_1_aantal; ?></td>
<td><?php echo $locate_2_aantal; ?></td>
<td><?php echo $locate_3_aantal; ?></td>
</tr>
<?php
}
$product_id = $result->product_id;
$product = $result->product;
$type = $result->type;
$locate_1_aantal = '';
$locate_2_aantal = '';
$locate_3_aantal = '';
}
switch( $result->locate_id ) {
case 1:
$locate_1_aantal = $result->aantal;
break;
case 2:
$locate_2_aantal = $result->aantal;
break;
case 3:
$locate_3_aantal = $result->aantal;
break;
}
}
if( !is_null( $product_id ) ) {
?>
<tr>
<td><?php echo $product_id; ?></td>
<td><?php echo $product; ?></td>
<td><?php echo $type; ?></td>
<td><?php echo $locate_1_aantal; ?></td>
<td><?php echo $locate_2_aantal; ?></td>
<td><?php echo $locate_3_aantal; ?></td>
</tr>
<?php
}
?>
我很可能会把表格的写法分解成一个单独的函数,所以我不需要重复代码,但我认为你明白了。
答案 1 :(得分:1)
你需要的东西比你得到的要复杂得多:
$previd = null;
foreach ($results as $result) {
if ($result->id != $previd) {
#output previous built data...
echo "<td>$product</td><td>$type</td>etc...";
#end previous row/start new row
echo "</tr><tr><td>" . $result->id . "</td>";
# Reset vars to empty
$product = $type = $rotterdam = etc... = '';
$previd = $result->id;
}
$product .= $result->product . "\n";
$type .= $result->type . "\n";
etc...
}