PHP在表中循环

时间:2018-07-12 13:31:07

标签: php

我遇到了一个要在其中显示产品规格的修补程序,就像它们在任何电子商务网站上显示的一样。这里的属性组应该出现一次,包括其中的所有属性和值。但是,父属性组出现多次,并且其中的属性重复主题。它被反向显示在这里与我的期望。为了解释清楚,我将尽可能清楚地包括我的数据库结构,显示的视图以及我迄今为止尝试过的代码。首先,我将从数据库结构开始。假设我有三个表。

attribute_groups

atg_id    atg_name    atg_order
1         Memory         2
2         Motherboard    3
3         Processor      4
4         Technical      1

属性

atr_id    atr_group    atr_name    atr_order
   1         3         Clock Speed    2
   2         3         Description    1
   3         3         No. of Cores   3
   4         4         Test 1         2
   5         1         Test 2         1
   6         4         Test 3         1

product_attributes

pat_id   pat_product    pat_attribute   pat_value
   1         1              1           2.8Ghz
   2         1              2           This is some description
   3         1              3           8
   4         1              4           Test Value 1
   5         1              5           Test value 2

使用此信息,我想显示这样的规格(例如在电子商务网站上)。

Technical
Test 1  Test Value 1

Memory
Test 2  Test value 2

Processor
Clock Speed     2.8Ghz
Description     This is some description
No. of Cores    8

但是从我当前的代码来看,它的外观是这样的

Technical
Test 1  Test Value 1

Memory
Test 2  Test value 2

Processor
Clock Speed     2.8Ghz
Clock Speed     This is some description
Clock Speed     8

Processor
Description     2.8Ghz
Description     This is some description
Description     8

Processor
No. of Cores    2.8Ghz
No. of Cores    This is some description
No. of Cores    8

处理器属性组出现三次,属性重复出现,而不是父属性出现,所有三个属性一起出现。

到目前为止,我的PHP逻辑

// Fetch Product Specifications
$atGroup = $pdo->prepare("SELECT * FROM attribute_groups
                          LEFT JOIN attributes ON attribute_groups.atg_id = attributes.atr_group
                          LEFT JOIN product_attributes ON product_attributes.pat_attribute = attributes.atr_id
                          WHERE pat_attribute = atr_id AND pat_product = :id ORDER BY attribute_groups.atg_order ASC");
$atGroup-> bindValue(':id', $_GET['id']);
$atGroup-> execute();

while($at = $atGroup->fetch()){
  echo $at['atg_name']; echo "<br>";

  $specs = $pdo->prepare("SELECT * FROM product_attributes
                          LEFT JOIN attributes ON product_attributes.pat_attribute = attributes.atr_id
                          LEFT JOIN attribute_groups ON attribute_groups.atg_id = attributes.atr_group
                          WHERE pat_product = :id AND atg_id = :atg GROUP BY atr_name");
  $specs-> bindValue(':id', $_GET['id']);
  // $specs-> bindValue(':at', $at['atr_id']);
  $specs-> bindValue(':atg', $at['atg_id']);
  $specs-> execute();

    while($sp = $specs->fetch()){
      echo $at['atr_name']; echo $sp['pat_value']; echo "<br>";
    }
}

0 个答案:

没有答案