2017-10-21 66 views
1

我有類別表。表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; 
} 
?> 

回答

0

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功能可用於以不同方式進行 –