【发布时间】:2012-02-27 07:51:02
【问题描述】:
我需要编写一个查询来执行搜索,其中所有结果都按类别匹配。
这些类别有子类别,它们作为嵌套集模型工作,每个类别都有一个 lft 和一个 rgt 列。
如果cat2、cat3 和cat4 是cat1 的子级,那么它们的.lft 值介于 cat1.lft 和cat1.rgt
所有类别都存储在CATEGORIES 表中,并以ID 作为主键。
我需要的是一个类别ID 查找ITEMS 表上属于该类别的所有项目,以及属于类别子类别的所有项目。
我正在寻找的查询是这样的
SELECT i.id, i.name
FROM items AS i, categories AS c
WHERE i.category_lft BETWEEN c.given_cat_id_lft AND c.given_cat_id_rgt
我的意思是我得到类别主键 (ID) 但在查询中我需要使用它们的 rgt 和 ltf 值
我应该使用子查询还是联接? 查询应该如何? 我真的没有 SQL 方面的经验。
【问题讨论】:
-
看到这个question。
-
items 表是否存储项目的 category_id(如 ypercube 的回答中所假设的那样)或其 category_lft 值(如问题中提供的示例查询中所暗示的那样)?
标签: sql join mysqli subquery nested-sets