【问题标题】:php / Mysql associate tree search and item queryphp/Mysql关联树搜索和项目查询
【发布时间】:2011-08-21 18:39:01
【问题描述】:

我的数据库中有一个类别树。 我还有一个按类别 ID 与树相关联的项目表。

现在,我想列出特定类别中的所有项目及其子项及其子项等...

现在,我这样做:

  • 检索所有相关类别的 ID。
  • 在 items 表中使用 WHERE 子句进行查询,如下所示:WHERE cat_id=2 OR cat_id=10 OR ...

如果我有很多类别,我认为这种方式会导致查询很慢而且很长。有时,搜索可以包含 100 个类别。

有更好的做法吗?

【问题讨论】:

  • 我会说首先是太看索引并且可能对查询运行解释(只需在选择之前放入解释并查看结果)。甚至可以发布一个简单版本的表格(几行)和您现在正在使用的查询。
  • 如何将树存储在数据库中?
  • 请提供您的实际 SQL 语句供人们查看。如果您还没有这样做,请尝试一下。数据库非常快。
  • 在不了解您的数据的情况下,无法为您提供指导,请参阅此问题以获取选项:stackoverflow.com/questions/4048151/…

标签: php mysql tree hierarchical-data hierarchical


【解决方案1】:

来自 gugl 关于“在关系数据库中存储树”:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

  • 邻接表很简单,但在大多数复杂情况下并不好
  • 嵌套集从第一视角来看是复杂的(主要是在写入期间),但它更像是在 RDBM 中存储和读取树的标准。

+1 关于

EXPLAIN select * from table

这将帮助您发现瓶颈。

也可以试试

column1 = 1 or column1 = 2

类似:

column1 in (1, 2)

但无论如何,如果没有索引,它将无济于事。

【讨论】:

    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 2012-11-12
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多