1

首先,我找不到更好的主题标题名称,如果可以,请编辑标题。

我得到了以下表格:

products
- id
- name
- desc
- image

categories
- id
- name
- parent_id

products2categories
- id
- product_id
- category_id

假设我在表格中得到了这些信息:

products
- 102
- Pilot Pen Blue
- Some pen desc blah blah blah
- Some image location

categories
- 10           -11
- Pens         -Pilot Pens
- None         -10

products2categories
- 1
- 102
- 11 -> ofcourse if it's related to category 11, it also related to category 10

查看演示信息,我们可以看到我们得到了与类别编号 11 ( Pilot Pens) 相关的“Pilot Pen Blue”,但是由于“Pilot Pens”是“Pens”的“子代”,因此每当用户会查找ALL pen可用,我也想展示 Pilot 笔。

我该如何做到这一点?

如果你们有任何其他好的目录数据库结构,请随时提出建议!

4

2 回答 2

0

使用 Oracle(我知道这不是您的系统,它只是为了提供信息),您可以使用“CONNECT BY/PRIOR”进行一些“分层查询”(具有父/子关系的类别表是经典案例)。

我发现了另一个主题: Connect By Prior Equivalent for MySQL

他们谈论了一篇名为“ MySQL 中的分层查询”的博客文章,该博客演示了如何在 MySql 中获得类似的结果。

于 2013-08-05T13:50:39.287 回答
0

您需要在同一个表中选择父子类别。MySql 的简单选择解决方案的问题是您的查询将取决于您拥有的级别/深度的数量。如果只有一级父子关系,otisonoza提出的查询是可以的,但正如你问他,“如果类别的深度未知”怎么办?如果你有 4 级深度怎么办?

有几种解决方案,但它们中的每一个都将构建您的查询,具体取决于您拥有的级别数。在某些解决方案中,您需要存储每个类别的级别/深度。

我之前提出的链接提供了一个使用 MySQL 存储过程伪造“CONNECT BY/PRIOR”的解决方案。它将允许您选择由父/子关系链接的分层行,无论深度是多少。

另一种解决方案是使用递归函数在 PHP 中构造查询字符串。有一篇关于它的有趣文章,它为您提供了为这种类型的分层数据构造查询字符串的解决方案: http ://www.sitepoint.com/hierarchical-data-database/

特别注意get_path($node)递归函数。

于 2013-08-05T16:02:36.377 回答