如何在mysql中获取最新的行(post)修订版?

时间:2015-04-12 16:04:39

标签: php mysql laravel

我有一个包含帖子和修订的表格,类似于wordpress的做法。

id, parent_id, ...

每个根帖都将为NULL作为parent_id。我正在寻找一个查询来获取他们最新版本中的所有帖子。这可能是包含parent_id = NULL或修订帖子的原始帖子。

我正在构建的应用程序基于laravel,也许有一种优雅的方式可以在雄辩中解决这个问题?

感谢您的帮助!

3 个答案:

答案 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