0

私の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;

現在 4 つのフォルダーがありますが、100 行以上が返されているため、何か間違っていることがわかります。必要な説明をさせていただきます。

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 に答える