我有一个包含帖子和修订的表格,类似于wordpress的做法。
id, parent_id, ...
每个根帖都将为NULL作为parent_id。我正在寻找一个查询来获取他们最新版本中的所有帖子。这可能是包含parent_id = NULL
或修订帖子的原始帖子。
我正在构建的应用程序基于laravel,也许有一种优雅的方式可以在雄辩中解决这个问题?
感谢您的帮助!
答案 0 :(得分:1)
最大的元素是根元素或子元素。要检查根元素是否是最大的行,您可以验证它是否没有子元素(即,另一行引用它作为parent_id
not exist
}。
要检查子元素是否是最大元素,您可以验证具有相同parent_id
和更高id
的另一个子元素是否not exist
。
select * from mytable t1 where (parent_id is null
and not exists (
select 1 from mytable t2
where t2.parent_id = t1.id
)) or (parent_id is not null
and not exists (
select 1 from mytable t2
where t2.id > t1.id
and t2.parent_id = t1.parent_id
))
修改
您可以按coalesce(parent_id,id)
进行分组,以便让孩子和家长进入同一群体。
select coalesce(parent_id,id), max(id) from mytable
group by coalesce(parent_id,id)
答案 1 :(得分:0)
使用时间戳保存修订版(如果您在创建时使用Laravel schema builder使用$table->timestamps()
)并按created_at
降序排序。
答案 2 :(得分:0)
我不是100%你的问题,但是如果你想订购它们,请使用" ORDER BY id DESC"在SQL
中