php - 找到没有 child 的行,如果有 child 最新的 child

标签 php mysql sql

我有这样的简单表格:

  • 编号
  • 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/

相关文章:

php - (PHP) 具有排序依据和一定范围的 MySQL 随机行大表

php - 为 PHP 版本 5.6.2 启用线程安全

php - 创建 Web 应用程序的演示

php - 在 PHP 中过滤掉 MySQL 查询

mysql - 进行更高效的 COUNT

mysql - 简单的 SQL 查询错误

php - 像 stackoverflow 一样的分页

php - PowerBI CLI Node : No such file or directory

php - 使用 session 数据找出谁提交了表单

mysql - 有限分组依据