SELECT DATEDIFF 'create', 'lastlogin' FROM master
WHERE 差分? BETWEEN 30 and 1000
sum (通貨列)?
すいません全然わからないです。
どなたか教えていただけないでしょうか?
まず、課題には PHP は関係なく、SQL の課題です。phpMyAdmin は PHP というプログラミング言語で記述された、MySQL を管理するためのミドルウェアのことです。phpMyAdmin 自体が扱うのは SQL という言語です。
また、SQL の質問をする際には、必要なすべてのテーブル定義も合わせて記述する必要があります。そうでなければ SQL を記述することができません。
前置きはさておき、以下のテーブル定義があったと仮定します。
```sql
/**
* なぜ master という名前なのか? ユーザーアカウントを管理する目的のテーブルは、
* account か user という名前が一般的に利用されます。
*/
CREATE TABLE master(
`id` INTEGER UNSIGNED AUTO_INCREMENT,
`create` DATETIME NOT NULL,
`lastlogin` DATETIME NOT NULL,
PRIMARY KEY(`id`)
) ENGINE=InnoDB;
/**
* 「無料通貨」を表すテーブルです。
* web で調べてなお、無料通貨という日本語が理解できませんでしたが、
* おそらく無料で入手した仮想通貨を意味しているのでしょうか。
*/
CREATE TABLE money(
`id` INTEGER UNSIGNED AUTO_INCREMENT,
`master_id` INTEGER UNSIGNED NOT NULL,
`amount` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY(`id`)
) ENGINE=InnoDB;
```
このテーブルに対して「アカウント登録日から最終ログイン日までの差分日数が30日以上のユーザーが保持している無料通貨の総量を合計表示する」 SQL は以下のようになります。
```sql
MariaDB [hatena]> INSERT INTO master(`create`, `lastlogin`) VALUES('2017-06-20 00:00:00', '2017-09-01 00:00:00'), ('2015-02-10 00:00:00'
, '2032-01-01 00:00:00');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [hatena]> INSERT INTO money(`master_id`, `amount`) VALUES(1, 3), (2, 10);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [hatena]> SELECT SUM(amount) as total FROM master INNER JOIN money ON master.id = money.master_id WHERE DATEDIFF(`lastlogin`, `c
reate`) >= 30;
+-------+
| total |
+-------+
| 13 |
+-------+
1 row in set (0.00 sec)
```
SQL は表(テーブル)の関係を宣言的に記述するための言語で、データを集合として扱っているという認識が本質的に重要です。
2017/06/13 00:02:11表の結合については http://qiita.com/devopsCoordinator/items/3ba154429973a4ddc9e0 例えばこの URL を見てベン図でイメージを掴むと分かりやすいと思います。