我正试图全神贯注地查询一个表,该表具有分层类别数据(用于 cms),该数据也与我的帖子数据相关联,并且与我的 post2cat 表存在多对多类型的关系。具体来说,我的问题是如何获取属于特定类别 ID 的任何子类别(不限于直接后代,但可以是 n 级深)的所有帖子?这是我的表格:
“类别”表:
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(45) | YES | | NULL | |
| parent_id | int(11) | YES | MUL | 0 | |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
'post2cat' 表:
+---------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| post_id | int(11) | NO | MUL | NULL | |
| cat_id | int(11) | NO | MUL | NULL | |
+---------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
'帖子'表:
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(256) | NO | | NULL | |
| content | text | NO | | NULL | |
| end_date | datetime | NO | | NULL | |
| format_id | int(11) | NO | | NULL | |
| featured | int(1) | NO | | NULL | |
| status | int(3) | NO | | NULL | |
| publish_date | datetime | NO | | NULL | |
| date_created | datetime | NO | | NULL | |
| date_modified | datetime | NO | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
post_id 名称描述
后猫
最佳答案
在 MySQL 中仅使用 SQL 将树提取到任意深度 n 是一项挑战(参见:Managing Hierarchical Data in MySQL 和 Hierarchical Queries in MySQL)。
如果您处理的是小型数据集,那么从数据库中选择所有类别然后使用脚本语言构建树是最有意义的。然后可以遍历树以找到父节点和父节点的子节点,然后可以使用它们来使用连接查询数据库中的帖子。
关于mysql - 在分层 Mysql 查询方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5689635/