2017-03-01 112 views
1

我有一個foreach類別id,然後在那個foreach我查詢數據庫foreach id類別。我如何返回所有提取的產品的結果?這裏是我的查詢pdo fetchAll在foreach循環中

function produse_by_categ($id) 
    { 

     $stmt=$this->db->prepare("Select id_category FROM tbl_catalog_categories where name=:id"); 
     $stmt->bindParam(":id",$id); 
     $stmt->execute(); 
     $result = $stmt->fetchAll(); 

     foreach ($result as $categ) 
     { 
      $stmtt=$this->db->prepare("Select id_category FROM tbl_catalog_categories where id_parent=:id"); 
      $stmtt->bindParam(":id",$categ['id_category']); 
      $stmtt->execute(); 
      $resultt = $stmtt->fetchAll(); 

      $stmtt=$this->db->prepare("Select * FROM tbl_products 
           INNER JOIN tbl_products_to_categories on tbl_products_to_categories.id_category=:id 
           and tbl_products_to_categories.id_product=tbl_products.id_product "); 
      $stmtt->bindParam(":id",$categ['id_category']); 
      $stmtt->execute(); 
      $resulttt = $stmtt->fetchAll(); 

      return $resulttt; 
     } 
    } 
+0

'where name = id'?你確定嗎? –

+0

是的,actualy id是類似'書籍' – user3463807

+0

這樣的基本類別的名稱,所以基本上如果id是書你實際上說'SELECT id_category FROM tbl_catalog_categories where name ='books''? –

回答

2

使用連接將所有3個查詢合併爲一個,不要重新在php代碼中進行連接。

Select * 
FROM tbl_products p 
INNER JOIN tbl_products_to_categories ptoc on ptoc.id_product=tbl_products.id_product 
INNER JOIN tbl_catalog_categories c1 on ptoc.id_category=c1.id_category 
INNER JOIN tbl_catalog_categories c2 on c1.id_parent=c2.id_category 
WHERE c2.name=:id 

這樣你就可以避免在PHP中基本上模擬連接的多重嵌套循環。上述查詢中的:id參數是提供給php函數的$id參數。只需循環上述查詢的結果即可獲得屬於所有類別的所有產品。

如果產品屬於多個類別,那麼上述查詢(類似於您自己的代碼)將多次列出它。

+0

thnx很多,這正是我正在尋找,如何模擬連接,而不是做多個循環。它再次工作thnx! – user3463807

+0

只是爲了澄清:你的代碼是模擬連接,我的答案實際上包含連接:) – Shadow

+0

,如果我有另一個lvl sububmenu我會添加像這樣的另一個權利?'INNER JOIN tbl_catalog_categories c2.id_parent = c3。 id_category' – user3463807