mysql绑定到父子关系查询

时间:2017-02-07 01:46:55

标签: mysql

我有以下查询,如果级别只有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字段

1 个答案:

答案 0 :(得分:0)

我们假设你有以下带有伪代码服务器语言的html标记。

Question:<br/>
{{question.question}}<br/>

Answers:<br/>
<ul>
{{foreach answer in getRootAnswers(question.id)}}
    <li>{{printAnswer(answer)}}</li>
{{/foreach}}
</ul>

getRootAnswers(questionId)函数将返回pid为空的顶级答案。它应该生成像

这样的查询
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

您最终对答案树中的每个节点都有一个查询。