类别>子类别>子子类别>子子类别>产品1

时间:2014-07-19 11:45:16

标签: php mysql

我使用产品处理类别和子类别网站,并且可以创建的子类别数量是无限的,这意味着我们可以自己拥有子类别的子类别。 一切都很好,我只是有一个问题: 让我们假设"产品1"属于" SUB SUB CATEGORY 1"和" SUB SUB CATEGORY 1"是" SUB CATEGORY 1"的子类别。而后者是" CATEGORY 1"的子类别,如何在页面顶部显示以下内容"产品1": 类别1>子类别1>子子类别1>产品1

我的类别表是: ID nameofcategory 图片 父

我的产品表是: ID nameofproduct 类

提前致谢

1 个答案:

答案 0 :(得分:1)

我假设,如果某个类别没有父级,则其父级在数据库中为0。首先,我们获取产品的名称,类别的名称以及类别的父ID。然后我们检查,如果父ID是0.如果不是,那么我们寻找它的父。它应该继续,直到父ID变为0.所以,这应该成功:

$query = mysql_query("SELECT c.parent Parent, p.nameofproduct ProductName, c.nameofcategory CategoryName FROM product p INNER JOIN category c ON p.category = c.id WHERE p.id = " . $your_product_id . " LIMIT 1");
$result = mysql_fetch_array($query);
$parent = $result['Parent'];
$product_path = $result['CategoryName'] . ">" . $result['ProductName'];
while ($parent != 0) {
  $parent_query = mysql_query("SELECT parent, nameofcategory FROM category WHERE id = " . $parent);
  $parent_result = mysql_fetch_array($parent_query);
  $parent = $parent_result['parent'];
  $product_path = $parent_result['nameofcategory'] . ">" . $product_path;
}

编辑: 另外,我建议您将列名更改为以下内容:

产品表    - product_id   - 名称    - category_id 类别表    - category_id   - 名称   - 图片    - parent_id

这将使两个表之间的链接更加明显。这将使构建INNER JOIN查询变得更容易和更有吸引力。

所以在这种情况下代码看起来像这样:

$query = mysql_query("SELECT c.parent_id Parent, p.name ProductName, c.name CategoryName FROM product p INNER JOIN category c ON p.category_id = c.category_id WHERE p.product_id = " . $your_product_id . " LIMIT 1");
$result = mysql_fetch_array($query);
$parent = $result['Parent'];
$product_path = $result['CategoryName'] . ">" . $result['ProductName'];
while ($parent != 0) {
  $parent_query = mysql_query("SELECT parent_id, name FROM category WHERE category_id = " . $parent);
  $parent_result = mysql_fetch_array($parent_query);
  $parent = $parent_result['parent_id'];
  $product_path = $parent_result['name'] . ">" . $product_path;
}

它与上面的代码相同,但在我看来它更容易。