我有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
。
这是代码 - 供将来参考:->
<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 之后,我想我已经提出了其他 bug/错误 :->
更新 1 中的上述查询工作得很好,前提是父类别中根本没有产品,但子类别中有产品。如果父类目中有产品(有子类目),则不显示父类目产品,仅显示子类目产品。
如果用户单击父类别,我想显示父类别的所有产品以及子类别的所有产品。
如何解决此错误/错误?
据我了解,我还远不是专业人士,当使用 2 个表作为 1 个表时,您需要在两个表中使用相同的键,然后使用互连。像这样的东西。
$products = [];
if (isset($_GET['component_id'])) {
$sql = "SELECT inventory.* FROM inventory
JOIN components ON inventory.type = components.type
WHERE components.component_id = " . $_GET['component_id'];
$result = $conn->query($sql);