匿名質問者

phpMyadminを使用して、スマホゲームのアカウント登録日から最終ログイン日までの差分日数が30日以上のユーザーが保持している無料通貨の総量を合計表示するという課題を出されているのですが、正直php自体を人生で初めて使っているのでここまで応用できません。

SELECT DATEDIFF 'create', 'lastlogin' FROM master
WHERE 差分? BETWEEN 30 and 1000
sum (通貨列)?

すいません全然わからないです。
どなたか教えていただけないでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2017/06/16 00:10:03

回答1件)

匿名回答1号 No.1

まず、課題には 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)
```

匿名回答1号

SQL は表(テーブル)の関係を宣言的に記述するための言語で、データを集合として扱っているという認識が本質的に重要です。

表の結合については http://qiita.com/devopsCoordinator/items/3ba154429973a4ddc9e0 例えばこの URL を見てベン図でイメージを掴むと分かりやすいと思います。

2017/06/13 00:02:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません