Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
Mysql 在联接的派生表查询中使用LIMIT_Mysql_Sql - Fatal编程技术网

Mysql 在联接的派生表查询中使用LIMIT

Mysql 在联接的派生表查询中使用LIMIT,mysql,sql,Mysql,Sql,我使用派生表(MySQL的最新版本)从其他表中获取计数和数据,并将其添加到我的主结果集中。左外部联接中的一个小查询给我带来了一个问题。我正在尝试使用限制1条件获取该博客成员最近发表评论的日期。下面的整个查询获取成员的帐户详细信息和活动/登录统计信息 SELECT mem.member_id, mem.screen_name, mem.firstname, mem.lastname, mem.email, mem.add1, mem.add2, mem.town, mem.county, mem.

我使用派生表(MySQL的最新版本)从其他表中获取计数和数据,并将其添加到我的主结果集中。左外部联接中的一个小查询给我带来了一个问题。我正在尝试使用限制1条件获取该博客成员最近发表评论的日期。下面的整个查询获取成员的帐户详细信息和活动/登录统计信息

SELECT mem.member_id, mem.screen_name, mem.firstname, mem.lastname,
mem.email, mem.add1, mem.add2, mem.town, mem.county,
mem.post_code, mem.country_code, mem.country_name, mem.joined, mem.member_status,
IFNULL(rep.rep,0) as reputation,
IFNULL(com.cnt,0) as comments,
com1.lcomm as last_comment
FROM members AS mem
LEFT OUTER JOIN (
    SELECT member_id, SUM(awarded_what) as rep
    FROM members_reputation
    GROUP BY member_id) rep
    ON mem.member_id = rep.member_id
LEFT OUTER JOIN (
    SELECT member_id, COUNT(comment_id) as cnt
    FROM blog_comments
    GROUP BY member_id) com
    ON mem.member_id = com.member_id
LEFT OUTER JOIN (
    SELECT member_id, posted as lcomm
    FROM blog_comments
    ORDER BY posted DESC LIMIT 1) com1   **** problem with LIMIT
    ON mem.member_id = com1.member_id

// more left outer join sub queries to other tables

WHERE mem.member_id = 1
GROUP BY mem.member_id
我将查询标记为问题的地方就是问题所在。如果我使用posted DESC LIMIT 1的
订单,即使该成员有4条注释,它有时不会返回最后注释日期,但有时会返回-不确定模式。如果我取消限制1,它可以正常工作,但我担心它会返回所有评论日期,而不仅仅是它自己的最新日期,这会在DB增长时给我带来问题

这是怎么回事?为什么限制1有时不返回最后的注释日期?在没有限制条件的情况下,我的查询是否返回所有注释日期?解释/建议会很棒。

这是你的问题

LEFT OUTER JOIN (
    SELECT member_id, posted as lcomm
    FROM blog_comments
    ORDER BY posted DESC LIMIT 1) com1   **** problem with LIMIT
    ON mem.member_id = com1.member_id
在你的另一个左边加入节中,你正在做一个由。。。 但是在上面的问题一中,您依赖于join子句将您的集合限制为member_id,但是您已经在那时订购并限制了

这意味着有时(一个)结果与您的联接条件不匹配,从而导致空lcomm

你需要这样一个where子句

LEFT OUTER JOIN (
    SELECT member_id, posted as lcomm
    FROM blog_comments
        WHERE member_id = X
    ORDER BY posted DESC LIMIT 1) com1
    ON mem.member_id = com1.member_id
这是你的问题

LEFT OUTER JOIN (
    SELECT member_id, posted as lcomm
    FROM blog_comments
    ORDER BY posted DESC LIMIT 1) com1   **** problem with LIMIT
    ON mem.member_id = com1.member_id
在你的另一个左边加入节中,你正在做一个由。。。 但是在上面的问题一中,您依赖于join子句将您的集合限制为member_id,但是您已经在那时订购并限制了

这意味着有时(一个)结果与您的联接条件不匹配,从而导致空lcomm

你需要这样一个where子句

LEFT OUTER JOIN (
    SELECT member_id, posted as lcomm
    FROM blog_comments
        WHERE member_id = X
    ORDER BY posted DESC LIMIT 1) com1
    ON mem.member_id = com1.member_id

连接中的三个
(“
是语法错误。CopyIta故障?@MarcB:谢谢,已经编辑过。确实是复制粘贴问题!:)连接中的三个
(“
是语法错误。CopyIta故障?@MarcB:谢谢,已经编辑过。确实是复制粘贴问题!:)太棒了,发现得好!如果可以的话,我会+10:)太棒了,太棒了!如果可以,我会+10:)