【问题标题】:Select last value and totalcount from joined table从连接表中选择最后一个值和总数
【发布时间】:2015-03-30 10:10:25
【问题描述】:

我在我的数据库中创建了两个表;

  • todo_list
  • todo_list_item

现在,

todo_list 表包含

  • id
  • 名字

但是有子项称为列表项,因此是第二个表;

这个表todo_list_item包含

  • id
  • list_id
  • 名字
  • status_id

我想要实现的是:

  1. 列出所有 todo_lists
  2. 显示其中包含多少个todo_list_item
  3. 根据 todo_listtodo_list_item 表中获取最后一个 status_id

我可以通过一次加入来实现这一点,还是我真的必须加入 todo_list_item 表两次,以分别获取项目数和最后一个 status_id

【问题讨论】:

  • “从 todo_list_item 表中获取最后一个 status_id”是什么意思,你如何说状态“XYZ”是最后一个或最新的?
  • @SMA 添加/更新新的 todo_list_item 时,您可以发布状态。数据库的实际结构有点复杂,但想法是您可以使用评论和状态更新待办事项。最后发布的状态将始终是该项目的“当前状态”。
  • “我可以通过一次加入来实现这一点吗?” - 不。“我真的必须加入 todo_list_item 表两次吗” - 是的。您甚至可能需要一个带有 having 子句的子查询。

标签: mysql select join count


【解决方案1】:

您可以使用以下内容,这将根据来自todo_list_itemmax(id) 获得status

select 
td.*,
x.total,
tdi.status_id
from todo_list td
left join todo_list_item tdi on td.id = tdi.list_id 
join (
 select max(id) as id ,count(*) as total, list_id from todo_list_item group by list_id
)x
on x.id = tdi.id and x.list_id = tdi.list_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2018-02-12
    • 1970-01-01
    相关资源
    最近更新 更多