我有一个正在制作的购物车。而且我很难找到如何在多层次类别中加载产品,这些类别是我所关注类别的孩子。
例如: -汽车 Subarus(Legacy,Outback) - Holden(Commodore,Calais) - 丰田(卡罗拉,凯美瑞)
如果我正在查看汽车类别,我可以选择子类别,但我无法查看这些子类别中的实际产品。有什么方法可以做到这一点吗?即使你可以拥有无限级别的类别,例如“ROOT> Cars> Sedan> Subaru ......”?
每个产品都有一个与类别相关的类别ID。每个类别都有其唯一的ID和一个“父”ID,该ID具有其所属类别的ID。
答案 0 :(得分:1)
我认为你需要做的是建立一个类别ID列表,然后为你的sql构造一个IN
子句。假设您有以下类别结构:
要获取某个类别的所有后代,您需要使用以下内容循环遍历父/子结构:
/**
* I'm only writing pseudocode here btw; I haven't tested it.
* Obviously you'll need to fire the SQL commands...
*/
function getKids ($id, $found = array())
{
array_push ($found, $id);
$nbrKids = "select count(id) from category where parent_id = $id";
if ($nbrKids > 0) {
$newKids = "select id from category where parent_id = $id";
foreach ($newKids as $kid) {
return getKids ($kid, $found);
}
}
else {
return $found;
}
}
然后像这样拨打getKids()
,其中$id
是您的类别ID:
$ids = getKids($id);
$ids
是您感兴趣的所有类别的数组。然后您可以使用join()
构造SQL字符串:
$sql = "select * from cars where category_id in (" . join (",", $ids) . ")";
为了正确,您应该先检查$ids
是否至少有1个成员,否则您的SQL查询将无效。
[编辑:实际上在上面的代码中,$ids
将始终至少有一个成员:初始ID。但是,代码不验证初始id是否是有效的category_id。 ]