首页 > 解决方案 > 如何设置 PHP 循环以获取产品并创建规格表

问题描述

我在数据库中有两个表。附上相同的图像。

表 1:晚餐套餐 表一:晚餐套餐

表 2:名称 表 2:名称

两个表中的“名称”行相同。表 1 包含每个项目的规格细节。表 2 只是应包含在整个页面上的产品名称列表。我想获取每个产品名称的所有规格。例如,产品 Rajwadi 餐具应从表 1 中获取其所有规格。我需要添加大约 50 个这样的产品。我希望它显示的方式也显示在下图中。

内容

我一直在尝试的代码是这样的:

<?php
    
include("connection.php");

$db_dinner_set = "dinner_set";
$db_names = "names";

$query2= "SELECT * FROM $db_names";
//echo($query);
$statement2 = $connection2->prepare($query2);
$statement2->execute(); 
$result2 = $statement2->fetchAll();
            
foreach($result2 as $row){
  echo '
    '.$row['Name'].'
    <br>
    <br>
  ';
  $Name = $row['Name'];
  $query3= "SELECT * FROM $db_dinner_set WHERE Name = $Name ";
  //echo ($query3);
  $statement3 = $connection2->prepare($query3);
  $statement3->execute(); 
  $result3 = $statement3->fetchAll();
  foreach($result3 as $row)
  {
    echo '   
      <div class="poem-genre">
        '.$row['Items'].'
      </div>
    ';
  }
}
?>

标签: phpdatabaseloopsdatatables

解决方案


您的桌子设计需要一些工作,但您仍然可以完成任务。加入表名(不理想):

SELECT d.Name, d.Items, d.pieces, d.image FROM dinner_set d LEFT JOIN names n ON d.Name = n.Name

然后循环遍历 PHP 中的结果,为每个项目构建一个对象。

$items = [];

foreach($result3 as $row){

    // Add item by name
    if (!array_key_exists($row['name'], $items)) {
        $items[$row['name']] = [];
    }
    $piece = [];
    // Add attributes of the particular piece
    $piece['name'] = $row[Items];
    $piece['qty'] = $row[pieces];
    
    // Assign this piece to this item
    $items[$row['name']][] = $piece;

}

现在您有一个项目数组,每个项目将包含该项目的片段列表。


推荐阅读