PHP显示子类别中的产品...自定义购物车

时间:2011-06-22 03:17:54

标签: php sql search while-loop

我有一个正在制作的购物车。而且我很难找到如何在多层次类别中加载产品,这些类别是我所关注类别的孩子。

例如: -汽车 Subarus(Legacy,Outback) - Holden(Commodore,Calais) - 丰田(卡罗拉,凯美瑞)

如果我正在查看汽车类别,我可以选择子类别,但我无法查看这些子类别中的实际产品。有什么方法可以做到这一点吗?即使你可以拥有无​​限级别的类别,例如“ROOT> Cars> Sedan> Subaru ......”?


每个产品都有一个与类别相关的类别ID。每个类别都有其唯一的ID和一个“父”ID,该ID具有其所属类别的ID。

1 个答案:

答案 0 :(得分:1)

我认为你需要做的是建立一个类别ID列表,然后为你的sql构造一个IN子句。假设您有以下类别结构:

  • 汽车(id:1)
    • 丰田(身份证:2,父母:1)
      • 迷你(身份证:3,父母:2)
      • 卡罗拉(身份证号码:4,父母:3)
    • Holden(身份证号码:5,父母:1)
      • 体育(身份证号码:6,父母:5)
      • HSV(身份证号码:7,父母:6)

要获取某个类别的所有后代,您需要使用以下内容循环遍历父/子结构:

/** 
  * 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。 ]