我有2张桌子
产品
和类别
(CatParentId 0是父类别)。
我想要实现的是当用户点击父类别时,它应该获取该类别中列出的产品以及它的子类别产品,如果用户点击任何子类别,它应该获取仅限于儿童类别中列出的产品。
这是我到目前为止使用的完整代码,但没有成功:
<section class="col-lg-9 col-md-9 col-sm-9">
<?php
$catId = $catName = $n = "";
$id = 0;
require_once 'Classes/class.Validation.php';
$validate = new Validation();
if ( isset( $_GET['name'] ) && $_GET['name'] != "" ) {
$catName = $_GET['name'];
$u = "SELECT CatId, CatName, CatParentId FROM categories WHERE CatName = '".$catName."'";
$validate->Query($u);
if ($validate->NumRows() >= 1) {
while ($rows = $validate->FetchAllDatas()) {
$id = $rows['CatId'];
$n = $rows['CatName'];
$query = "SELECT
c.CatName,
p.ProdCode,
p.ProdName
FROM
products p,
categories c
WHERE
c.CatId = p.CatId
AND
c.CatParentId = '".$id."'";
$validate->Query($query);
if ($validate->NumRows() >= 1) {
while ($row = $validate->FetchAllDatas()) {
// show products here
}
} else {
$query = "SELECT
c.CatName,
p.ProdCode,
p.ProdName
FROM
products p,
categories c
WHERE
c.CatParentId = p.CatId
AND
c.CatId = '".$id."'
";
$validate->Query($query);
if ($validate->NumRows() >= 1) {
while ($row = $validate->FetchAllDatas()) {
// show products here
}
}
}
}
}
}
?>
</section>
我很确定我有一个逻辑错误,但我无法找到它所在的位置。请帮助我。任何帮助将受到高度赞赏。
更新1 :
我自己解决了这个问题。使用INNER JOIN
。
以下是代码 - 供将来参考: - &gt;
<section class="col-lg-9 col-md-9 col-sm-9">
<?php
$catId = $catName = $n = "";
$id = 0;
require_once 'Classes/class.Validation.php';
$validate = new Validation('benef8w7_ecommerce');
if ( isset( $_GET['name'] ) && $_GET['name'] != "" ) {
$catName = $_GET['name'];
$query = "SELECT
p.ProdCode,
p.ProdRate,
c1.CatId,
c1.CatName,
c2.CatParentId
FROM
categories c2
INNER JOIN
categories c1
ON
c2.CatId = c1.CatParentId
INNER JOIN
products p
ON
p.CatId = c1.CatId
WHERE
c2.CatName = '".$catName."'";
$validate->Query($query);
if ($validate->NumRows() >= 1) {
while ($row = $validate->FetchAllDatas()) {
// show all the products here for both parent and child categories.
}
} else {
$query = "SELECT
p.ProdCode,
p.ProdName,
c.CatId,
c.CatParentId,
c.CatName
FROM
products p
INNER JOIN
categories c
ON
c.CatId = p.CatId
WHERE
c.CatName = '".$catName."'";
$validate->Query($query);
if ($validate->NumRows() >= 1) {
while ($row = $validate->FetchAllDatas()) {
// show products here if there are no child categories.
}
}
}
}
?>
</section>
但是在更新1之后,我想我已经提出了其他错误/错误: - &gt;
如果父类别中没有产品,但子类别中有产品,则更新1中的上述查询工作正常。如果父类别中有产品(具有子类别),则不会显示父类别产品,并且仅显示子类别产品。
如果用户点击父类别,我想显示父类别的所有产品以及子类别的所有产品。
如何解决此错误/错误?