在PHP foreach循环中echo SQL PDO对象

问题描述:

我有类别表。表3中的一个项目可能有多个类别。如下三个表:在PHP foreach循环中echo SQL PDO对象

表1:

ID Item_id 
1 1 
2 2 
3 3 
4 4 
5 5 

表2:

ID Item_id Category 
    1 1  cat1 
    2 2  cat1 
    3 2  cat2 
    4 3  cat2 
    5 3  cat3 
    6 3  cat4 
    7 4  cat2 
    8 5  cat1 
    etc. 

第三表有类别名称的唯一信息:

表3:

Category_id category_name 
cat1  apples 
cat2  oranges 
cat3  bananas 
cat4  pineapples 

我做了一个查询以获取所有项目的PDO对象,并能够在PHP中响应每个项目的所有类别。

首先查询:

public function getCategories(){ 
$this->db->query('SELECT table1.*, table2.*, table3.* 
     FROM table1 
     INNER JOIN table2 
     ON table1.item_id = table2.item_id 
     INNER JOIN table3 
     ON table2.category=table3.category_id'); 

$results = $this->db->resultset(); 
return $results;} 

$items = $offer_class -> getCategories(); 

我如何可以采取每个项目的所有类别名称在foreach循环,象下面这样:

回声:项目1:苹果

回声:项目2:苹果,桔子

回声:第3项:桔子,香蕉,菠萝

我已经试过这foreach循环,但它给我的只有第一个类别名称为每个项目:

<?php foreach($items as $item){ 
echo $item->category_name; 
} 
?> 

JOIN返回单一记录sequentally,所以结果看起来或多或少是这样的:

1, cat1, apples 
2, cat1, apples 
2, cat2, oranges 
3, cat2, oranges 
3, cat3, bananas 
3, cat4, pineapples 

您必须将记录按Item_id进行分组,并一次打印所有类别名称(这将会出现在伪伪代码中,因为我不知道php,我从其他几个答案中复制粘贴) :

$dict = []; 
foreach($items as $item) { 
    $id = $item->Item_id 
    $dict[$id][] = $item; 
} 

// here print all the values from the arrays 
foreach($result as $arr) { 
    echo ??? // print the category_name for each element in $arr in the same line 
} 
+0

棘手的一个问题是,在那些表中可能需要重命名dublicate列名称 – SuperDJ

+0

@JakubDąbek,所以您建议更改sql查询以摆脱JOIN?这段代码有点令人困惑... Aledziękujęza pomoc;) – gileneusz

+0

@gileneusz我不知道是否有与使用JOIN不同的方法,所以我试图以某种方式解决它的局限性。可能有一些SQL功能可用于以不同方式进行 –