一尘不染

具有关系innoDB的递归MySQL查询

mysql

我有一个类似(简化)的表结构:

内容

 - id_content
 - my_string1
 - ...

content_has_content

  - id_content
  - id_subcontent

topic_has_content

  - id_topic
  - id_content

任何主题都可以具有多个“内容”,任何“内容”都可以具有多个“子内容”(内容实例)。对于给定的id_topic,我想从链接的内容,子内容,子内容的子内容等中接收所有my_string1的列表。

我了解“ WITH”不适用于mysql,但找不到很好的递归替代方法。

谢谢丹尼尔


阅读 197

收藏
2020-05-17

共1个答案

一尘不染

MySQL中没有递归,而且您得到的结果将是平坦的(无结构)。最好的方法仍然是在PHP,Java或您使用的任何编程语言中进行while循环。

查询可能如下所示:

SELECT C.*, CHC.ID_SUBCONTENT
FROM CONTENT C
LEFT OUTER JOIN CONTENT_HAS_CONTENT CHC ON CHC.ID_CONTENT = C.ID_CONTENT
WHERE C.ID = ?
... // you get the idea

在PHP中,您可以使用下一个sub_content_id重复查询,直到 ID_SUBCONTENT is null

2020-05-17