MySQL中的分层查询以检索已连接的表

时间:2015-02-25 23:34:21

标签: mysql mysqli

我有这两张桌子。 表:文章

+--------------+--------------+------+-----+-----------------------------+
| Field        | Type         | Null | Key | Default Extra                       |
+--------------+--------------+------+-------+---------------+
| articleid    | int(14)      | NO   | MUL | NULL      |             |
| categoryid   | int(14)      | NO   |     | NULL           

表:类别

+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| cat_parent| int(11) | NO   |     | 0       |       |
| cat_child | int(11) | NO   |     | 0       |       |
| sortorder | int(11) | YES  |     | NULL    |       |
+-----------+---------+------+-----+---------+-------+

这是来自mysql站点的查询:

   SELECT t1.articleid AS lev1, t2.articleid as lev2, t3.articleid as lev3, t4.articleid as lev4
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.child = t1.cat_parent
LEFT JOIN categories AS t3 ON t3.child = t2.cat_parent
LEFT JOIN categories AS t4 ON t4.child = t3.cat_parent  

我想要做的是根据父母或孩子检索所有物品

我在mysql site上已经阅读了这个内容,但是当我有2个表时,我不明白如何应用这个概念。我修改的查询来自我链接的页面。

1 个答案:

答案 0 :(得分:0)

请参阅我对原始问题的评论。如果我理解你的问题,应该这样做。将{您开头的文章的ID}替换为您的值,您将获得该文章所属类别的子类别或父类别中所有内容的articleid值。

请注意,这不是一个真正的递归或分层查询,这在MySQL中非常棘手,除非绝对必要,否则最好的策略通常是避免它。

如果这还不够,您确实需要进行分层查询,请参阅this answer.

我希望有所帮助!

SELECT DISTINCT(a1.articleid)
FROM articles a
LEFT JOIN categories c ON c.categoryid = a.categoryid
LEFT JOIN articles a1 ON a1.categoryid = a.categoryid OR a1.categoryid = c.cat_parent OR a1.categoryid = c.cat_child
WHERE a.articleid = {the id of the article you start with}