pdo — заполнение html-таблицы данными mySQL в php без добавления повторяющихся строк

Я использую этот запрос, чтобы получить данные из 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
}
?>

Это все работает нормально, но когда вы смотрите на вывод:
введите описание изображения здесь

Это именно то, что я сделал выше, но я хочу добиться того, чтобы на один идентификатор продукта приходилась только 1 строка. Я пытался найти решение в течение нескольких часов, но я не нашел ни одного.

Я, наверное, обдумываю этот способ и думаю, что мне следует использовать другой запрос или что-то в этом роде, но было бы неплохо, если бы кто-нибудь мог мне помочь с этим.

Заранее спасибо!

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
}
?>

Вероятно, я бы разбил написание строки таблицы на отдельную функцию, поэтому мне не нужно было повторять код, но я думаю, что вы поняли идею.

2

Другие решения

Вам понадобится гораздо более сложный, чем у вас есть:

$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...
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector