ここから質問投稿すると、最大10000ポイント当たる!!!! >>

テーブルを作りたいのですが、思い描くテーブルが作れず、困っています・・・

例えばMさんがA→B→C→Dと旅行に行ったとします。
そのとき、行った場所によって日付が登録されるようにしたいと思っています。
このように、別な人もいろいろと旅行し、それぞれの日付があり、どんどんと格納していきます。
最初に

ID id
日付 date
場所 point

(名前はとりあえず、IDとします)
でテーブルを作ろうとしましたが、これだとID一つにつき、日付と場所も一つずつしか入りませんよね?
どういったテーブルを作ればいいでしょうか?

思い描くテーブルは下記のような感じです。

ID     日付      場所
--------------
1  |2010/10/06 |  A
  |2010/10/14 |  B
  |2010/10/20 |  C
  |2010/10/25 |  D
--------------------------
2  |2010/10/23 |  B
   |2010/10/24 |  A
   |2010/10/25 |  D
   |2010/10/27 |  C
--------------------------
3  |2010/10/25 |  D
   |2010/10/27 |  C
   |2010/11/03 |  B
   |2010/11/04 |  A
   |2010/11/07 |  D
   |2010/11/10 |  C
-------------------------
4  |2010/11/10 | B
   |2010/11/15 |  A
   |2010/11/16 |  D

・・・・・・・・・・・・・・・

このように一つのIDに対して、日付と場所がランダムの数で格納したいのですが、これって可能でしょうか?
テーブルを2つ(以上)作り、外部キーを使ってもかまいません。
また、足りなければ違うIDなどでカバーしてもかまいません。


実際は、このようなテーブルを作り、一人毎の動線を調べるために活用したいと思っています。
Mさん:今日はAに行って、明日はBに行き、明後日はCに行った。すなわち動線は・・・のような感じです。

SQL文でテーブルを作ってください。
補足事項等ありましたらご指摘下さい。追加いたします。
よろしくお願いします。

A 回答 (2件)

 一読して、気になった事は2つ。



1.提示されたテーブルで「ID」が何を指すのか分からない。
2.Mさんという情報がテーブルの中にない。

仮に、IDがMさん、すなわち人物を指すのであれば、テーブルはこのままで良い。主キーがID単独ではなく、ID、日付、場所の3つに対して付与されれば良い。

MySQLで以下のような書き方が許されるかはわからない(当方、Oracle、DB2、Microsoft SQL Server、PostgreSQLの4つくらいしか普段使わない)が、とりあえずこれを参考にMySQLで「複合主キー」をはるにはどうすれば良いか調べてみると良いだろう。

CREATE TABLE TRIP (
ID id,
日付 date,
場所 point,
CONSTRAINT PK_TRIP PRIMARY KEY(ID,日付,場所) -- 複合主キーと言い、ID、日付、場所の3つの組み合わせがユニークとなる制約を作成する
)

この回答への補足

ご回答ありがとうございます。
説明不足で申し訳ないです・・・
簡略化するためMさんをIDに置き換えました。
本来は、IDを外部キーにして、外部で人物(Mさん)を登録しようとしてました。

ですが、質問どおりMさんを置いといて考えていただいて結構です!


複合主キーは使ったことなかったです。参考になりました。
一度それで作ってみようと思います。

補足日時:2010/11/28 20:43
    • good
    • 0

create table tbl(ID int,HIDUKE date,POINT varchar(10));


INSERT INTO tbl values(
'1','2010/10/06','A'),(
'1','2010/10/14','B'),(
'1','2010/10/20','C'),(
'1','2010/10/25','D'),(
'2','2010/10/23','B'),(
'2','2010/10/24','A'),(
'2','2010/10/25','D'),(
'2','2010/10/27','C'),(
'3','2010/10/25','D'),(
'3','2010/10/27','C'),(
'3','2010/11/03','B'),(
'3','2010/11/04','A'),(
'3','2010/11/07','D'),(
'3','2010/11/10','C'),(
'4','2010/11/10','B'),(
'4','2010/11/15','A'),(
'4','2010/11/16','D');

というデータ保持をして

SELECT GROUP_CONCAT(POINT ORDER BY HIDUKE ASC)
FROM tbl
WHERE ID='1'

とすればよいでしょう
    • good
    • 0
この回答へのお礼

シンプルに考えてよかったんですね・・・
難しく考えすぎてたようです。
ご回答ありがとうございました。

お礼日時:2010/12/01 22:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング