Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在多对多关系中搜索最后一条注释_Sql_Doctrine Orm_Many To Many_Max - Fatal编程技术网

Sql 在多对多关系中搜索最后一条注释

Sql 在多对多关系中搜索最后一条注释,sql,doctrine-orm,many-to-many,max,Sql,Doctrine Orm,Many To Many,Max,我有三张桌子: 发布、发布和评论 这是一种多对多的关系 我想为每个帖子选择最后一条评论。 因此,在DESC limit 1处通过create_从注释顺序中选择*之类的操作在这里不起作用 我想要像这样的东西: select * from post as p left join post_comment as pc on (pc.post_id = p.id) left joint comment as c on (c.id = pc.comment_id) left j

我有三张桌子:

发布、发布和评论

这是一种多对多的关系

我想为每个帖子选择最后一条评论。 因此,在DESC limit 1处通过create_从注释顺序中选择*之类的操作在这里不起作用

我想要像这样的东西:

select *
  from post as p
    left join post_comment as pc on (pc.post_id = p.id)
    left joint comment as c on (c.id = pc.comment_id)
    left joint comment as c2 on (c2.id = pc.comment_id and c2.id > c.id)
  where c2.id is null
对于一对多关系来说,它非常有效,但对于多对多关系,我无法理解这一点

注意:我重命名了我的表。在我的代码中,我不使用comment和post。我需要一个多对多的关系


谢谢您

查询中的主表应该是postcomment,您可以按postid分组,并获取maxpostcomment,前提是它是一个自动递增ID

然后,您只需将结果与其他表联接,即可获得其余数据。 由于您可能需要从其他表中获取大量数据,并且为了避免将所有这些数据添加到group by,我将使用CTE:

CTE是sql server语法,如果不使用sql server,则必须使用另一种机制来存储此临时数据

with my_cte as
(
    select idpost, max(idcomment)  as last_comment_id
    from postcomment pc 
    group by idpost
)
select *
from my_cte 
     join post p on p.idpost=my_cte.idpost
     join comment c on c.idcomment=my_cte.last_comment_id

查询中的主表应该是postcomment,您可以按postid进行分组,并获取maxpostcomment,前提是它是一个自动递增ID

然后,您只需将结果与其他表联接,即可获得其余数据。 由于您可能需要从其他表中获取大量数据,并且为了避免将所有这些数据添加到group by,我将使用CTE:

CTE是sql server语法,如果不使用sql server,则必须使用另一种机制来存储此临时数据

with my_cte as
(
    select idpost, max(idcomment)  as last_comment_id
    from postcomment pc 
    group by idpost
)
select *
from my_cte 
     join post p on p.idpost=my_cte.idpost
     join comment c on c.idcomment=my_cte.last_comment_id

我是这样做的:

select *
  from post as p
    left join post_comment as pc on (pc.post_id = p.id)
    left join comment as c on (c.id = pc.comment_id)
    left outer join
            (post_comment as pc2
                inner join comment as c2 on (c2.id = pc2.comment_id)
            ) on (bc2.post_id = p.id and c1.created_at < c2.created_at)
  where c2.id is null

我是这样做的:

select *
  from post as p
    left join post_comment as pc on (pc.post_id = p.id)
    left join comment as c on (c.id = pc.comment_id)
    left outer join
            (post_comment as pc2
                inner join comment as c2 on (c2.id = pc2.comment_id)
            ) on (bc2.post_id = p.id and c1.created_at < c2.created_at)
  where c2.id is null

您使用的是哪种数据库管理系统?神谕博士后?如果你使用ORM,那么可能会用哪种ORM和哪种语言来标记你的问题。也许你会得到你需要的确切答案。好的,我将它标记为doctrine2你使用的是哪种DBMS?神谕博士后?如果你使用ORM,那么可能会用哪种ORM和哪种语言来标记你的问题。也许你会得到你所需要的确切答案。好的,我将把它标记为doctrine2我使用orm。所以我更喜欢用陈述来表达。但是谢谢,我用orm。所以我更喜欢用陈述来表达。但是谢谢。