【问题标题】:PHP Show Products within the child categories... custom shopping cartPHP 显示子类别中的产品...自定义购物车
【发布时间】:2011-09-20 01:02:06
【问题描述】:

我正在制作一个购物车。而且我很难找到如何在我正在查看的类别的子类别的多级类别中加载产品。

例如: -汽车 Subarus (Legacy, Outback) - Holden (Commodore, Calais) - Toyota (Corolla, Camry)

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


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

【问题讨论】:

  • 表格结构和关系可能会有所帮助

标签: php sql search while-loop


【解决方案1】:

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

  • 汽车 (id:1)
    • 丰田(ID:2,父母:1)
      • 迷你(id:3,父母:2)
      • 卡罗拉(ID:4,父代:3)
    • Holden (id:5, parent:1)
      • 体育(id:6,父母:5)
      • HSV(ID: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。 ]

【讨论】:

  • 非常感谢 :) 太好了...我会去的!
猜你喜欢
  • 1970-01-01
  • 2018-09-08
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
相关资源
最近更新 更多