我的SQL数据库结构如下。。。
电子邮件持有人
id, name
电子邮件消息
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;
目前有四个文件夹,但返回了一百多行,所以我知道我做错了什么。我很乐意作出任何必要的澄清。
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
。