在单个查询中获取文件夹名称和总读取/未读取

时间:2013-09-05 04:17:15

标签: php mysql

我的SQL数据库结构如下......

email_folders

id, name

email_messages

id, id_folder, date, date_read

在单个MySQL查询中,我正在尝试获取文件夹名称,它们的总电子邮件数量同时计算每个文件夹的电子邮件总数和未读数。

到目前为止,虽然PHP中返回的数组返回了的电子邮件的行数,但返回所有文件夹来自email_folders表的文件夹。

这是我现在拥有的......

SELECT 
ef.name, 
(SELECT count(id) FROM email_messages WHERE id_folder=ef.id AND date_read<date) AS unread, 
(SELECT count(id) FROM email_messages WHERE id_folder=ef.id) AS total 
FROM email_messages AS em
LEFT JOIN email_folders AS ef ON ef.id=em.id_folder;

目前有四个文件夹,但是返回了一百多行,所以我知道我做错了什么。我很乐意做出任何必要的澄清。

1 个答案:

答案 0 :(得分:1)

select
    f.name FolderName,
    count(m.id) TotalMessagesCount,
    sum(m.date_read < m.date) TotalUnreadMessagesCount
from email_folders f
left join email_messages m on f.id = m.id_folder
group by f.id

我真的很想知道为什么date_read < date对你来说意味着Unread。将date_read设置为null对我来说更有意义,可以将其视为Unread