質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

2376閲覧

MySQL 縦にある値の横表示?

Z-TALBO

総合スコア525

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2016/07/09 03:38

編集2016/07/09 08:25

###DBの設計

MySQL

1[visit_plan] 2plan_id int not null primary key 3user varchar(10) 4time datetime 5 6[visit_staff] 7id int not null auto increment primary key 8plan_id int not null 9staff varchar(10)

上記のようにまずデータベースを作成しました。

###テストデータ
plan_id = 1111
user = ABC
time = 2016/07/09 12:30:00
staff = A
staff = B
staff = C
※staffに関しては1人~3人が可変です

###DBの中を見る
[visit_plan]
plan_id | user | time
1111 | ABC | 2016/07/09 12:30:00

[visit_staff]
id | plan_id | staff
1 | 1111 | A
2 | 1111 | B
3 | 1111 | C
テストデータを入れた場合、このようにテーブルの中に入ります。

###結合して表示させる

MySQL

1"SELECT plan_id, user, time, staff FROM visit_plan P INNER JOIN visit_staff S ON P.plan_id = S.plan_id"

とりあえずINNER JOINで結合してみると、下記のようになるかと思います。
plan_id | user | time | staff
1111 | ABC | 2016/07/09 12:30:00 | A
1111 | ABC | 2016/07/09 12:30:00 | B
1111 | ABC | 2016/07/09 12:30:00 | C

###質問内容
上記の表示を下記のように表示させたいのですが、どのようになるのでしょうか?
検索するのに、言葉も思いつかず、、、

plan_id | user | time | staff | staff | staff
1111 | ABC | 時間 | A | B | C
このような形にできますでしょうか?

###解決?
回答ありがとうございます。。。
MySQLというよりPHPを書きながら少しこっちでいじってみようと思い、そもそもの考え方を変えました。

1.まずは、plan_id, user, timeを引っ張ってきて
2.plan_idを使ってvisit_staffにwhereで指定
3.foreach内でfor文を使って回す

この流れで表示ができました!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/09 03:41

SHOW CREATE TABLE LIKE 'テーブル名'で得られるテーブル定義を追記してください。
guest

回答1

0

ベストアンサー

sql

1SELECT 2 plan_id, user, time, GROUP_CONCAT(staff) as staff 3FROM visit_plan P 4INNER JOIN visit_staff S ON P.plan_id = S.plan_id 5GROUP BY P.plan_id

plan_id | user | time | staff | staff | staff
staff | staff | staff のように、同じ項目を横に並べるのは不可能です。

投稿2016/07/09 03:49

編集2016/07/09 03:52
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Z-TALBO

2016/07/09 08:26

回答ありがとうございます。 そもそも、MySQLでやらなきゃいけないということは無かったのですが、とりあえずプログラムの方で表示させることができました!
退会済みユーザー

退会済みユーザー

2016/07/09 08:28

ループの中でSQLを投げるのはアンチパターンですね。 できれば避けたほうが良い実装ですが、習作ということならいいのではなかろうかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問