在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
}
棘手的一个问题是,在那些表中可能需要重命名dublicate列名称 – SuperDJ
@JakubDąbek,所以您建议更改sql查询以摆脱JOIN?这段代码有点令人困惑... Aledziękujęza pomoc;) – gileneusz
@gileneusz我不知道是否有与使用JOIN不同的方法,所以我试图以某种方式解决它的局限性。可能有一些SQL功能可用于以不同方式进行 –