在PHP中使用mySQL数据填充html表而不添加重复的行

时间:2014-12-10 15:08:51

标签: php pdo duplicates

我使用此查询从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
}
?>

一切正常,但是当你看输出时: enter image description here

这正是我上面所做的,但我想要实现的是每个产品ID只有一行。我一直试图找到一个解决方案几个小时,但我没有找到任何解决方案。

我可能正在努力思考这个问题,我想我应该使用另一个查询或其他东西,但如果有人能帮我解决这个问题会很好。

提前致谢!

2 个答案:

答案 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...
}