php 最后一条记录,PHP / MYSQL:在联接表的联接AND行数中获取表的最后一条记录

好的,我有两个表,一个类别表和一个职位表。

我希望构造一个查询,该查询将返回每个类别,该类别的帖子表中的最后一条记录(category.id = post.category_id)以及所有具有post.category_id = category.id的帖子的行数

类别列表,每个类别都有该类别的最新帖子记录以及该类别中的帖子数。

我尝试了各种联接和子选择,并且设法获得了类别列表,其帖子数和其第一帖子(我需要最后一个)。

我还设法获得了类别及其最后发布的列表,但没有发布计数。

任何帮助/方向将不胜感激!

您的描述缺少一些数据(我已经做过假设),但是SQL应该是:

SELECT category_id,max(postdate) last,count(id) postcount

FROM posts

GROUP BY category_id

如果您需要分类表中的某些内容,则只需加入即可。

假设:

您的帖子表中有一列称为postdate的列,该列反映了帖子的生成日期(因此,最大的是最新的)。如果没有日期,您也可以执行max(id) ...尽管只有在没有更改的情况下才能更新过去的帖子,所以它实际上是最近的帖子(例如,id = 2上周创建,今天更新,id = 3昨天创建) )。

有一个名为id的列-每个帖子行的唯一ID。

如果您需要最后一篇文章的内容,则需要将其重新添加到帖子表中。

感谢您的答复Rudu。 我确实想使用帖子表中的id字段来搜索最后一个帖子。 我认为您发布的查询将仅返回具有帖子的类别(无论帖子数如何,我都希望返回所有类别。此外,当我尝试加入帖子数据并按category_id分组时,第一个帖子记录是 返回,而不是最后一个。我只能通过使用subselect来抓住最后一个(或者看起来如此!)

尝试这个:

SELECT category_id, MAX(post_id) AS post_id, COUNT(*) AS posts

FROM post

GROUP BY category_id

假定您具有严格增加且唯一的列post_id。

如果没有这样的字段,但是例如post_date不是唯一的,则在极少数情况下,如果两个帖子具有完全相同的时间戳,则可能会为某些类别获得两行。

要获取没有帖子的类别,请使用LEFT JOIN:

SELECT

category.id AS category_id,

MAX(post.id) AS post_id,

COUNT(post.category_id) AS posts

FROM category

LEFT JOIN post

ON category.id = post.category_id

GROUP BY category.id

如果需要每个表中的更多列,则可以将上面的结果与原始表连接:

SELECT *

FROM

(

SELECT

category.id AS category_id,

MAX(post.id) AS post_id,

COUNT(post.category_id) AS posts

FROM category

LEFT JOIN post

ON category.id = post.category_id

GROUP BY category.id

) T1

JOIN category

ON T1.category_id = category.id

LEFT JOIN post

ON T1.post_id = post.id

谢谢您的回答。Mark,它的功能很棒-只需一小步。 这只会返回至少有一个帖子的类别,是否可以更改为也返回没有帖子的类别? 干杯!

辉煌! 快速调整一下即可满足我的需求,并且效果很好-非常感谢!

对于其他感兴趣的人-我将第5行的category.id更改为category.id AS category_id,它现在可以正常使用

@ user1018742:感谢您指出错误。 香港专业教育学院更新我的答案以更正它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值