我的查询中有什么错误?

时间:2014-12-31 11:45:27

标签: php mysql

在下面的查询中它返回12条记录,而来自from子句的查询(作为t)返回18条记录,任何人都可以帮助查询中的问题是什么?

SELECT count(abc.id) as total_this_month,t.* 
FROM email_details abc
JOIN
(SELECT count(email_details.id) as total_emails,MAX(`email_details`.email_date) as email_date1, `email_details`.* FROM (`cld_users` join email_details on email_details.fk_user_id = cld_users.id) GROUP BY `email_details`.`email_title` ORDER BY `email_details`.`email_date` DESC) as t 
ON abc.email_title = t.email_title
where (MONTH(abc.email_date)=MONTH(NOW()) AND YEAR(abc.email_date)=YEAR(NOW()))
group by  t.email_title
ORDER BY t.`email_date` DESC

1 个答案:

答案 0 :(得分:1)

在您的查询中,指定

where (MONTH(abc.email_date)=MONTH(NOW()) AND YEAR(abc.email_date)=YEAR(NOW()))

但是在子查询(返回18个结果的那个)中,您有6封电子邮件,其中一个月不是2014年12月。这些电子邮件无法通过明确排除它们的查询返回。

你也想要那些电子邮件,所以你得到18个结果?删除不包括它们的WHERE子句:

SELECT Count(abc.id) AS total_this_month,
       t.*
FROM   email_details abc
       JOIN (SELECT Count(email_details.id)         AS total_emails,
                    Max(`email_details`.email_date) AS email_date1,
                    `email_details`.*
             FROM   (`cld_users`
                     JOIN email_details
                       ON email_details.fk_user_id = cld_users.id)
             GROUP  BY `email_details`.`email_title`
             ORDER  BY `email_details`.`email_date` DESC) AS t
         ON abc.email_title = t.email_title
GROUP  BY t.email_title
ORDER  BY t.`email_date` DESC  

从那里开始,如果您想计算当月的电子邮件,只需替换:

SELECT Count(abc.id) AS total_this_month,

SELECT SUM(CASE WHEN MONTH(abc.email_date)=MONTH(NOW()) AND YEAR(abc.email_date)=YEAR(NOW()) THEN 1 ELSE 0 END) AS total_this_month,