2011-04-05 102 views
0

這是將兩個SQL查詢合併到數組的正確方法嗎?將兩個SQL查詢組合到一個數組中?

注:我知道SQL JOIN,但我需要使用兩個查詢。

見下文:現在

$query = "SELECT * FROM categories WHERE takeawayID = :TakeawayID"; 
    $statement = $this->db->prepare($query); 
    $statement->bindValue(':TakeawayID', $takeawayID, PDO::PARAM_STR); 
    $statement->execute(); 
    $data['rowCats'] = $statement->fetchall(PDO::FETCH_CLASS); 
    $categories = array(); 
    foreach ($data['rowCats'] as $cat) { 
     $temp_categories = array(); 
     $temp_categories['id'] = $cat->id; 
     $temp_categories['name'] = $cat->name; 

     $num = $cat->id; 

     $query = "SELECT * FROM items WHERE category_id = :category_id"; 
     $statement = $this->db->prepare($query); 
     $statement->bindValue(':category_id', $num, PDO::PARAM_STR); 
     $statement->execute(); 
     $data['rowItem'] = $statement->fetchall(PDO::FETCH_CLASS); 
     foreach ($data['rowItem'] as $Item) { 
      $temp_categories['item']['name'][] = $Item->name; 
     } 
         $categories[] = $temp_categories; 
    } 

$類別陣列可以被傳遞到視圖文件(模板)

在視圖文件我應該可以做這樣的事情:

<?php foreach($categories as $category): ?> 
    <table border=0 Cellspacing='0'> 
     <tr> 
      <td> 
       <?php echo $category['name']; ?> 
      </td> 
     </tr> 
    <?php foreach ($category['items'] as $item): ?>  
     <tr> 
      <td> 
       <?php echo $item['name']; ?> 
      </td> 
     </tr> 
    <?php endforeach; ?> 
    </table> 
<?php endforeach; ?> 
+0

什麼樣的問題?它輸出什麼?你有錯誤信息嗎? – Kaivosukeltaja 2011-04-05 16:59:40

回答

2

你有什麼理由將結果作爲類而不是關聯數組獲取?將FETCH_CLASS更改爲FETCH_ASSOC可讓您直接將項目名稱添加到第一個查詢的結果中,而無需使用臨時數組。

在該foreach循環中,語義上只有一個具有多個名稱的項目。我認爲這不是你想要做的,所以你應該寫這樣的東西:

foreach ($data['rowItem'] as $Item) { 
     $temp_categories['item'][] = array('name' => $Item->name); 
    } 
+0

謝謝!這解決了這個問題。有沒有替代方法比數組('名稱'=> $項目 - >名稱); ? – user622378 2011-04-05 17:30:45

+1

@ user622378:是的,你可以使用'$ arr = array(); $ arr ['name'] = $ Item-> name; $ temp_categories ['item'] [] = $ arr;'但我的答案中的版本只是它的簡寫。 – Kaivosukeltaja 2011-04-05 17:33:46