0

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

电子邮件文件夹

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;

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

4

1 回答 1

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.

于 2013-09-05T04:32:51.340 回答