ここにはユーザーテーブルとidが主キーです。ここで次のMySQLクエリをより効率的に書く方法はありますか?
+------------+-----------------+
| id | name | created |
+------------+-----------------+
| 1 | Sumon | 2015-01-10 |
+------------+-----------------+
| 2 | James | 2015-01-11 |
+------------+-----------------+
| ...| ... | ... |
+------------+-----------------+
[出席テーブルとの一対多の関係は、別のテーブルには、出席です。ここでIDは、主キーであるとUSER_IDは
以下のようにのように私の上記のMySQLのクエリの私の現在のMySQLのクエリSELECT COUNT(DISTINCT user_id) AS january,
(SELECT COUNT(DISTINCT user_id) FROM attendances WHERE year='2016' AND month=2) as february,
(SELECT COUNT(DISTINCT user_id) FROM attendances WHERE year='2016' AND month=3) as march,
...
...
(SELECT COUNT(DISTINCT user_id) FROM attendances WHERE year='2016' AND month=12) as december
FROM attendances WHERE year='2016' AND month=1
結果ユーザーテーブル
+--------------+------+--------+-----------------+
| id | user_id | year | month | created |
+--------------+------+--------+-----------------+
| 1 | 2 | 2015 | 1 | 2015-01-10 |
+--------------+---------------+-----------------+
| 2 | 1 | 2016 | 2 | 2016-02-10 |
+--------------+------+--------+-----------------+
| 3 | 1 | 2016 | 2 | 2016-02-11 |
+--------------+------+--------+-----------------+
| ...| ... | ... | ... | ... |
+--------------+------+--------+-----------------+
の外部キーであります
+---------+----------+-------+-------+-----+-------+------+--------+-----------+---------+----------+----------+
| january | february | march | april | may | june | july | august | september | october | november | december |
+---------+----------+-------+-------+-----+-------+------+--------+-----------+---------+----------+----------+
| 24 | 17 | 20 | 0 | 24 | 23 | 19 | 24 | 13 | 0 | 0 | 0 |
+---------+----------+-------+-------+-----+-------+------+--------+-----------+---------+----------+----------+
thこの同じクエリをより効率的に書く方法はありますか?
は、プレゼンテーション層でのデータ表示の取り扱いの問題を考えてみましょう。それははるかに柔軟でスケーラブルです。 – Strawberry
あなたは 'group by'ステートメントを使用できます。http://www.w3schools.com/sql/sql_groupby.asp – Webman
ありがとうございます@Strawberry –