Mysql 按分层文本排序,但按数字排序?

标签 mysql sql sorting

是的,标题令人困惑,但我会保持简单。想象一个照片页面,上面有评论。这些评论可以通过回复它们来嵌套。我需要为他们找到正确的排序顺序。

我使用“谱系”存储这些层次结构。它是层次结构中单个评论位置的文本、扁平化值。这是一个正确排序的线程。我只显示沿袭列:

903
909
909-1404
第1405章

903 是第一条评论,909 是第二条评论。 1404是对第二条评论的回复,最后,1405是最后一条评论,未回复。这是他们应该如何排序。不过,我正在努力达到那个结果。如果我只是这样做,这就是我得到的:

按血统排序

1405
903
909
909-1404

这里的错误是1405应该在底部。我知道 (+0) 技巧可以像数字一样对文本进行排序:

排序方式(血统+0)

这给了我这个:

903
909-1404
909
第1405章

这一次,线程评论 (1404) 排序错误,它应该排在父评论 (909) 之后。

有没有一种简单的方法可以完成我想要的排序?我唯一能想到的就是在前面用零填充评论 ID,但这将是一个非常痛苦的迁移过程,我非常想避免。

最佳答案

ORDER BY CAST(REPLACE(lineage,"-",".") AS DOUBLE)

903
909
909.1404
1405

但是您的“沿袭”可能不是在关系数据库中存储数据之间关系的最佳方式……也许考虑规范化?

关于Mysql 按分层文本排序,但按数字排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6707882/

相关文章:

sql - 使用 SSIS 包加载数据时理解间歇性不一致的问题

javascript - 来自 CodeWars 的重量重量

postgresql - 您是否可以为 ORDER BY 子句使用自定义 Postgres 比较函数?

PHP MySQL登录函数

sql - 如何使这个 Mysql 查询工作?

php - 在 URL 中使用连字符

postgresql - plpgsql 循环查询和更新

java - 如何使用配置文件连接到 Spring 中的数据库?

ios - 如果存在返回什么

mysql数据库链表反规范化