我的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;
目前有四个文件夹,但是返回了一百多行,所以我知道我做错了什么。我很乐意做出任何必要的澄清。
答案 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
。