我有这两张桌子。 表:文章
+--------------+--------------+------+-----+-----------------------------+
| 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个表时,我不明白如何应用这个概念。我修改的查询来自我链接的页面。
答案 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}