2015-07-28 88 views
2

我正在用Codeigniter和MYSQL構建一個CMS。並有一個這樣的桌子。要打印輸出這樣Mysql一個父多個子結果不重複父行

foreach($parent as $parentData): 
echo"<h4>".$parentData->parentName."</h4>"; 
echo"<ul>"; 
foreach($child as childData): 
echo"<li>".$childData->childName."</li>"; 
endforeach; 
echo"</ul>" 
endforeach; 

產生此

<h4>Movie</h4> 
<ul> 
<li>Harry Potter</li> 
<li>Avengers</li> 
<li>Fury</li> 
</ul> 
<h4>Food</h4> 
<ul> 
<li>Pizza</li> 
<li>Burger</li> 
</ul> 
<h4>Sports</h4> 
<ul> 
<li>Foot Ball</li> 
<li>Cycling</li> 
</ul> 

代碼的任何調整被歡迎

CREATE TABLE parent 
(`parentId` int, `parentName` varchar(50)); 

INSERT INTO parent 
(`parentId`, `parentName`) 
VALUES 
(1, 'Movie'), 
(2, 'Food'), 
(3, 'Sports'); 

CREATE TABLE child 
(`childId` int, `parentId` int,`childName` varchar(50)); 
INSERT INTO child 
(`childId`, `parentId`, `childName`) 
VALUES 
(1, 1, 'Harry Potter'), 
(2, 3, 'Foot Ball'), 
(3, 2, 'Pizza'), 
(4, 2, 'Burger'), 
(5, 1, 'Avengers'), 
(6, 1, 'Fury'), 
(7, 3, 'Cycling'); 

而想要輸出。 因爲我在過去的幾個小時裏一直在嘗試這個。 在此先感謝。

更新: 我實現了我的代碼作爲CodeGodie建議的答案,並添加了一個這樣的視圖。

foreach ($result as $arr) { 
if (!isset($final[$arr["parentName"]])) { 
    $final[$arr["parentName"]] = array(); 
} 
array_push($final[$arr["parentName"]], $arr); 
} 
foreach ($final as $parent=> $childs) { 
echo $parent."<br>"; 
foreach ($childs as $child) { 
    print_r($child) ; 
} 
} 

現在,我得到的結果,我期待

+0

我不沒有得到它,你需要輸出,但是你提供的查詢是'INSERT'和'CREATE'查詢,而不是'SELECT',你希望我們提供'SELECT'查詢? – Epodax

+0

我正在搜索選擇查詢。我已經嘗試了兩個表的左連接,但是自從父表重複使用後,我無法在foreach循環中使用它。 –

+0

好吧,是的,這是一個加入如何工作... – thebjorn

回答

1

有多種方法可以做到這一點。不過,我會用下面的辦法:

  1. 您需要創建下面的SQL查詢:

    SELECT * FROM parent p 
    JOIN child c ON c.parentId = p.parentId 
    ORDER BY parentName 
    

    或者在笨:

    $this->db->select("*"); 
    $this->db->from("parent p"); 
    $this->db->join("child c", "c.parentId = p.parentId "); 
    $this->db->order_by("parentName"); 
    $q = $this->db->get(); 
    return $q->result_array(); 
    

    ,這將給你的東西結果像這樣:

    $result = array(
        array(
         "parentId" => 2, 
         "parentName" => "Food", 
         "childId" => 3, 
         "childName" => "Pizza", 
        ), 
        array(
         "parentId" => 2, 
         "parentName" => "Food", 
         "childId" => 4, 
         "childName" => "Burger", 
        ), 
        array(
         "parentId" => 1, 
         "parentName" => "Movie", 
         "childId" => 1, 
         "childName" => "Harry Potter", 
        ), 
        array(
         "parentId" => 1, 
         "parentName" => "Movie", 
         "childId" => 5, 
         "childName" => "Avengers", 
        ) 
    ); 
    
  2. 迭代通過結果:

    foreach ($result as $arr) { 
        if (!isset($final[$arr["parentName"]])) { 
         $final[$arr["parentName"]] = array(); 
        } 
        array_push($final[$arr["parentName"]], $arr); 
    } 
    
    var_dump($final); 
    

    這會給你這個樣子,你可以再重複,以建立自己的HTML結果:

    array (size=2) 
        'Food' => 
        array (size=2) 
         0 => 
         array (size=4) 
          'parentId' => int 2 
          'parentName' => string 'Food' (length=4) 
          'childId' => int 3 
          'childName' => string 'Pizza' (length=5) 
         1 => 
         array (size=4) 
          'parentId' => int 2 
          'parentName' => string 'Food' (length=4) 
          'childId' => int 4 
          'childName' => string 'Burger' (length=6) 
        'Movie' => 
        array (size=2) 
         0 => 
         array (size=4) 
          'parentId' => int 1 
          'parentName' => string 'Movie' (length=5) 
          'childId' => int 1 
          'childName' => string 'Harry Potter' (length=12) 
         1 => 
         array (size=4) 
          'parentId' => int 1 
          'parentName' => string 'Movie' (length=5) 
          'childId' => int 5 
          'childName' => string 'Avengers' (length=8) 
    

希望這有助於

+1

感謝CodeGodie。這做了工作。 –

0

這個查詢將得到所有的數據:

SELECT parent.parentName, child.childName 
FROM parent 
INNER JOIN child on parent.parentId = child.parentId; 

,並返回它:

------------------------------ 
parentname | childName 
------------------------------ 
Movie   | Harry Potter 
Movie   | Avengers 
Movie   | Fury 
et cetera...