The*_*ail 16
有三种(四种)替代可能性:
一种递归查询,用于根据父ID选择所有注释.许多数据库产品都支持此功能,语法取决于数据库类型.查看文档以获取更多信息(搜索"递归").
如果将文章ID存储在每个(子)注释中,则只需在一个常规选择查询中选择具有文章ID的所有注释即可.您可以使用父ID在右侧父评论下正确显示页面上的评论:
SELECT * FROM comments WHERE article_id = :article_id
Run Code Online (Sandbox Code Playgroud)如果您只需要两个级别的注释,则可以使用扩展位置包括第一级和第二级注释:
SELECT * FROM comments
WHERE parent_id = :article_id
OR parent_id IN (SELECT id FROM comments WHERE parent_id = :article_id)
Run Code Online (Sandbox Code Playgroud)也可以使用union all来组合具有相同列的两个查询,但由于我假设所有数据都来自同一个表,因此可能不需要它(请参阅上面的扩展where子句):
SELECT * FROM comments WHERE parent_id = :article_id
UNION ALL
SELECT * FROM comments WHERE parent_id IN
(SELECT id FROM comments WHERE parent_id = :article_id)
Run Code Online (Sandbox Code Playgroud)就个人而言,我会选择2,因为它很简单(不需要异乎寻常的SQL构造),高效(1个查询)和灵活(支持任意级别的注释).
| 归档时间: |
|
| 查看次数: |
4704 次 |
| 最近记录: |