我有一个带有类别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;
}
}
答案 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
参数。只需循环查看上述查询的结果,即可获得属于所有类别的所有产品。
如果某个产品属于多个类别,则上述查询(与您自己的代码类似)会多次列出。