2

私はこれに対する答えをグーグルで精査してきましたが、私が作っているよりも簡単だと確信しており、これを行う正しい方法を学びたいと思っています.

emails_sentカウントを選択し、列でグループ化するテーブルが 1 つあります。各行にはtype、「確認」、「1 日」、「当日」の 3 つのいずれかが含まれます。私も特定の日付までにこれをやっています。たとえば、今日選択するクエリの例を次に示します。

SELECT Count(id) AS count, 
       type 
FROM   emails_sent 
WHERE  Date_format(date, '%Y-%m-%d') = '2013-03-29' 
GROUP  BY type 
ORDER  BY type; 

これはそれが返すものです:

+------+---------+
| | カウント | タイプ |
+------+---------+
| | 32 | 確認 |
| | 4 | 1日 |
+------+---------+

これは素晴らしいことですが、たまたま今日のレコードが 0 である 3 番目の「タイプ」もありますが、0 であってもそのカウントを取得する必要があります。

また、これらの 3 つの「タイプ」だけを含む 2 番目のテーブルを作成し、右結合を使用してみましたが、それでも 0 カウントは取得されません。これは私が2つのテーブルで行ったことです:

SELECT t.type, 
       Count(s.id) AS count 
FROM   emails_sent s 
       RIGHT JOIN email_types t 
               ON s.type = t.type 
WHERE  Date_format(s.date, '%Y-%m-%d') = '2013-03-29' 
GROUP  BY t.type; 

私が見逃しているのは単純なものだと確信しています。

4

2 に答える 2

1

これを試して

SELECT t.type, 
       COALESCE( Count(s.id), 0 ) AS count 
FROM   email_types t 
       LEFT JOIN email_sent s 
               ON s.type = t.type 
WHERE  Date_format(s.date, '%Y-%m-%d') = '2013-03-29' 
GROUP  BY t.type; 

注:LEFT JOIN代わりにa を使用しました。1 type has many emails

于 2013-03-29T16:41:20.400 に答える
0

私が問題を正しく理解していれば、特定のタイプのレコードを取得できなかった場合、それはエントリが 0 であると想定できませんか?

于 2013-03-29T16:42:59.987 に答える