mysql绑定(bind)父子关系查询

标签 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 字段

最佳答案

假设您有以下带有伪代码服务器语言的 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/

相关文章:

mysql - 应用架构 MySQL/PHP/Java/AngularJS

php - Laravel 5.4 升级——违反完整性约束——列不能为空

MySQL比较日期和时间戳

java - Hibernate + 并发插入(MySQL INSERT IGNORE)

mysql - MySQL 中使用缓冲池的低可用内​​存和许多 NULL 索引

php - Codeigniter 将数据表传输到表

javascript - 使用ajax在while循环中更新MySql数据库记录 - 仅更新第一行

mysql - 在单个大插入上丢失与 mysql 的连接

mysql - 如何统计数据库每小时的行数?

mysql - 数据 GridView 显示列但不显示数据