Как мне прописать данные в другой таблице, мне нужно показать все мои данные с помощью цикла, но «Имя пакета» столбца будет с одной таблицей.

Код PHP:

<table>
<?php
include('connection.php');

$result1 = mysqli_query($conn, "SELECT * FROM bundel ");
while ($row = mysqli_fetch_assoc($result1)) {
    echo $row['BundelName'];
    $bundel = $row['BundelName'];

    echo '<tr>';
    echo '<td>';
    echo $row['SKU'];
    echo '</td>';
    echo '<td>';
    echo $row['Description'] ;
    echo '<td>';
    echo '</tr>';
    
    if ($row['BundelName'] != $bundel){
        echo"</table><br><br><table>";
    } 

}
?>
</table>

MySQL My result

my expected result

1
nzxy12 11 Окт 2021 в 09:36

4 ответа

Лучший ответ

Если вы хотите проанализировать результаты с помощью одного цикла, можно использовать следующий подход. Важной частью здесь является то, что вам понадобится предложение ORDER BY в вашем операторе и соответствующие изменения в скрипте, чтобы ваш цикл работал.

Упрощенный пример, основанный на коде в вопросе:

$result1 = mysqli_query($conn, "SELECT * FROM bundel ORDER BY BundelName");
$bundel = "";
while ($row = mysqli_fetch_assoc($result1)) {
    if ($bundel != $row["BundelName"]) {
        echo "<table>";
        echo '<tr><td>' . $row['BundelName'] . '</td></tr>';
    };

    echo '<tr>';
    echo '<td>' . $row['Description'] . '</td>';
    echo '<td>' . $row['SalesPrice'] . '</td>';
    echo '</tr>';

    if ($bundel != $row["BundelName"]) {
        echo "</table>";
        $bundel = $row["BundelName"];
    };
}

Конечно, вы можете сгруппировать и сохранить набор результатов в массиве, используя BundelName в качестве ключа, и распечатать ожидаемый результат, используя другой цикл:

$stmt = mysqli_query($conn, "SELECT * FROM bundel");
$result = array();
while ($row = mysqli_fetch_assoc($stmt)) {
    $result[$row["BundleName"]][] = array(
        "Description" => $row["Description"],
        "SalePrice" => $row["SalePrice"]
    );  
}

foreach ($result as $bundle => $products) {
    echo "<table>"; 
    echo '<tr><td>' . $bundle . '</td></tr>';
    foreach ($products as $product) {
        echo '<tr>';
        echo '<td>' . $product["Description"] . '</td>';
        echo '<td>' . $product["SalePrice"] . '</td>';
        echo '</tr>';
    }
    echo"</table>";     
}   
2
Zhorov 11 Окт 2021 в 11:20

Я также рекомендую способ, предложенный @Robert.

Но вот быстрый и грязный способ сделать это.

$result1 = mysqli_query($conn, "SELECT DISTINCT BundleName FROM bundel ");
while ($row = mysqli_fetch_assoc($result1)) {
      echo $row['BundelName'];
      $bundel=$row['BundelName'];
      echo"<table>";
      $query2 = "SELECT * FROM bundel WHERE BundelName='$bundel'";
      $result2 = mysqli_query($conn, $query2);
      while ($row2 = mysqli_fetch_assoc($result1)) {
             echo '<tr>';
             echo '<td>';
             echo $row2['SKU'];
             echo '</td>';
             echo '<td>';
             echo $row2['Description'] ;
             echo '<td>';
             echo '</tr>';
        }
    echo"</table>";
                           
 }
1
Dula 11 Окт 2021 в 06:50

Вы можете использовать «GROUP BY BundelName» в своем запросе sql или вы можете сначала запросить «SELECT DISTINCT (BundelName) FROM bundel» и сохранить в массиве и использовать все отдельные значения этого массива при создании отдельных таблиц. В групповом случае вы можете сделать трюк, создав новую таблицу всякий раз, когда вы обнаружите новую группу в цикле while. Подсказка - in_array () в php.

1
Preetam Pal 11 Окт 2021 в 06:55

Я предпочитаю array_map или foreach, но использую "while", как в вашем примере, попробуйте следующее:

    $results = [];

    while ($row = mysqli_fetch_assoc($result1)) {
      
      $results[$row['BundelName']] = $row['description'];

    }

И создайте таблицу в html с данными, отправленными PHP.

1
JC Cavalca 11 Окт 2021 в 07:26