我有这样的简单表格:
- 编号
- parent_id
- 创建于
具有父/子关系...如果一行是子行,则它有一个 parent_id,否则它的 parent_id 为 0。
现在我想选择所有没有子项(因此本身)或有子项的行,因此通过 created_at 获取最新的子项(并且不将其自身包含在最终结果中)。
作为一个视觉示例,您可以看一下这张小图片:
http://s9.picofile.com/file/8294092118/qqq.jpg
我只想选择第 24 和 27 行:
24 因为它没有 child
不是 25 因为它有 child
27 因为它是 25 岁的最新 child
而不是 26,因为它的 child 也是 25,但不是最新的
最佳答案
- 使用
left join
获取所有父子对。 - 按 child 的 created_at 排序,按 parent_id 分组,将为每个 parent_id 生成最新的 child_id。
- 当child_id不存在时,使用
coalesce
默认为parent_id:
查询:
select coalesce(child_id, parent_id)
from (
select a.id parent_id, b.id child_id, b.created_at
from mytable a
left join mytable b on a.id = b.parent_id
where a.parent_id = 0
order by b.created_at desc) a
group by parent_id
关于php - 找到没有 child 的行,如果有 child 最新的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812984/