我有一个类似于此的表类别。我的类别最多可以跨越4个级别,但我选择始终只显示选定的一个级别。
| id | parent_id | name | ... |
| 1 | 0 | A | ... |
| 2 | 1 | A1 | ... |
| 3 | 2 | A2 | ... |
| 4 | 1 | A3 | ... |
| 5 | 0 | B | ... |
基本上我正在尝试选择父类别和他们的第一级孩子。因此,在选择之后,我应该从父母那里得到所有行parent_id = 0
和parent_id = parent_id
。
我应该得到:
| id | parent_id | name | ... |
| 1 | 0 | A | ... |
| 2 | 1 | A1 | ... |
| 4 | 1 | A2 | ... |
| 5 | 0 | B | ... |
我试过了:
SELECT * AS t1 FROM categories
WHERE parent_id = 0 AND WHERE parent_id = t1.id;
我是SQL的新手,我可以使用PHP轻松完成这些代码,但我不想选择所有内容,然后执行复杂的排序功能。
如何选择表格一次以选择parent_id
,然后在此选择中进行第二次选择我只是在其中我所做的选择中,来自类别表格中的parent_id与等号id相同。
答案 0 :(得分:2)
像
这样的东西SELECT *
FROM categories
WHERE parent_id = 0
UNION ALL
SELECT c.*
FROM categories c INNER JOIN
categories p ON c.parent_id = p.id
WHERE p.parent_id = 0
答案 1 :(得分:1)
您可以使用自联接来实现相同的目标,
SELECT * FROM categories c1,
categories c2
WHERE c1.parent_id = 0
AND c1.parent_id = c2.id