在一个foreach循环中的pdo fetchAll

时间:2017-03-01 12:12:56

标签: php mysql pdo

我有一个带有类别ID的foreach,然后在foreach中查询数据库foreach id类别。我怎样才能归还所有产品的结果?这是我的查询

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;
        }
    }

1 个答案:

答案 0 :(得分: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参数。只需循环查看上述查询的结果,即可获得属于所有类别的所有产品。

如果某个产品属于多个类别,则上述查询(与您自己的代码类似)会多次列出。