我坚持这个:我正在做一个Joomla! 1.6扩展和使用类别。
对于那些没有使用类别的人,他们的工作方式如下:
您可以创建一个类别(名称,描述,父级),并将其存储在类别表中。
| id | parent_id | lft | rgt | level | etc |
--------------------------------------------------------
| 1 | 0 | - | - | 1 |
| 2 | 1 | - | - | 2 |
id
和parent_id
,我无需解释。
级别:是类别的级别,为0 ROOT,因此root的子级别为1级,级别1的子级别为2级等等。
lft
和rgt
是用于包装所有类别子类别的值(当您需要将1级以下儿童的I.E.类别提升到2级时非常有用)
我的表格有catid
列,指向相应类别的ID。
我需要的是让所有孩子都从这个类别中获得,但只有一个级别,
即。如果我的catid
指向2级类别,我需要获得级别为3且其父级id = catid的所有类别
如何编写查询?
我有类似的东西(查询是由PHP脚本编写的)/
让我们试试1级
SELECT *
FROM my_table
WHERE catid = 1
OR catid = (SELECT catid
FROM categories
WHERE level = 2 AND parent_id = 1)
如何与所有子查询的值进行比较?
答案 0 :(得分:1)
没有子查询,您将获得更好的性能:
SELECT t.*
FROM my_table AS t
INNER JOIN categories AS c ON t.catid = c.id
WHERE c.id = 1
OR c.parent_id = 1
我故意省略level = 2
,因为这是一个冗余信息。如果某个类别的parent_id = 1,则其级别为2。
答案 1 :(得分:0)
您可以使用IN
。
SELECT *
FROM my_table
WHERE catid = 1
OR catid IN (SELECT catid
FROM categories
WHERE level = 2
AND parent_id = 1)