要按照id、自引用id和日期对Postgres中的条目进行排序,并在每个父级之后按照子级进行列出,可以使用以下代码示例来解决:
WITH RECURSIVE ordered_entries AS (
SELECT id, self_reference_id, date
FROM entries
WHERE self_reference_id IS NULL
ORDER BY id, date
UNION ALL
SELECT e.id, e.self_reference_id, e.date
FROM entries e
JOIN ordered_entries oe ON e.self_reference_id = oe.id
ORDER BY e.id, e.date
)
SELECT *
FROM ordered_entries;
请注意,上述代码假设您的表名为entries
,并具有以下列:id
,self_reference_id
和date
。如果您的表结构不同,请相应地调整代码。
该代码使用了递归CTE(Common Table Expression)来按照指定的排序条件对条目进行排序。首先,它选择具有空自引用id的父级条目,并按照id和日期进行排序。然后,它通过递归地加入子级条目来扩展结果集,并使用相同的排序条件对子级条目进行排序。最后,通过从递归CTE中选择所有条目来返回最终结果。
请注意,此代码仅适用于PostgreSQL中支持递归CTE的版本。如果您使用的是较旧的版本,请查阅相应的文档以了解如何使用其他技术实现相同的功能。
上一篇:按照id组生成PHP序列号
下一篇:按照IF条件进行计数