如果级别只有 1 级深,我有以下查询,该查询效果很好,但如果有更多级别,则查询会造成麻烦,因为它不显示嵌套级别
SELECT
question.question,
answer.answer,
answer.questionid,
answer.pid,
question.DateAdded,
answer.DateAdded
FROM
answer
RIGHT JOIN question ON answer.questionid = question.id
请指导我如何处理
我的表结构是这样的:
问题表:
id
question
DateAdded
答案表:
pid
answer
questionid
DateAdded
按嵌套级别意味着条目将使用答案表的 pid
插入到答案表中,并插入到 questionid
字段
最佳答案
假设您有以下带有伪代码服务器语言的 html 标记。
Question:<br/>
{{question.question}}<br/>
Answers:<br/>
<ul>
{{foreach answer in getRootAnswers(question.id)}}
<li>{{printAnswer(answer)}}</li>
{{/foreach}}
</ul>
getRootAnswers(questionId)
函数将返回一个顶级答案,其中 pid
为 null。它应该生成一个类似的查询
SELECT
answer,
id,
DateAdded
FROM answer
WHERE questionid = @questionId AND pid is null
ORDER BY DateAdded
printAnswer
将生成标记
Added on: {{answer.DateAdded}}<br/>
{{answer.answer}}<br/>
<ul>
{{foreach childAnswer in getChildAnswers(answer.id)}}
<li>{{printAnswer(childAnswer)}}</li>
{{/foreach}}
<ul>
标记将首先打印answer
信息。然后它将打印 answer
的子答案。注意 printAnswer
递归调用。
getChildAnswers(parentId)
函数将返回由 parentId
标识的答案的子答案。它应该生成一个类似的查询
SELECT
answer,
id,
DateAdded
FROM answer
WHERE pid = @parentId
ORDER BY DateAdded
您最终会对答案树中的每个节点进行一次查询。
关于mysql绑定(bind)父子关系查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42080322/