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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

845閲覧

正規化による1つのレコードに対して複数のレコードがあるときのSELECTについて②

chapp

総合スコア233

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/05/14 09:00

編集2019/05/15 09:52

お世話になります。

https://teratail.com/questions/188905#

先日、同じタイトルで上記にて質問しましたが、同じテーブルにてまた別のことを伺いたく質問させてください。

memberテーブル
no  name  sex
1  佐藤  man
2  伊東  woman
3  金井  man
4  渡辺  woman

like_dataテーブル
data_no data_name
1    いちご
2    みかn
3    すいか
4    ぶどう
5    レモン
6    バナナ

like_memberテーブル(上記テーブルを基にしたメンバーが好きなものリスト)
like_no like_member_no like_data_no
1    1        2
2    2        2
3    1        3
4    3        3
5    1        4
6    2        4
7    3        4
8    4        1
9    4        2
10    4        4

※like_member_noは、memberテーブルのnoと紐づく
※like_data_noは、like_dataテーブルのdata_noと紐づく

とここ質問ですが、以下のようにメンバーを一覧で表示させつつ、そこに紐づく好きな(果物)を段を変えて表示させたいと考えているのですが、このような場合、like_memberテーブルを基本とし、該当するデータを全件取得し、PHPで表示を操作する方が良いのか?それともSQLで一発で取得することが出来るのか?(その場合、サンプルで構いませんのでどのようなSQLとなるのか併せて)ご教示いただければ幸いです。

よろしくお願いいたします。

1  佐藤  man
.      みかん
.      すいか
.      ぶどう
2  伊東  woman
.      みかん
.      ぶどう
3  金井  man
.      すいか
.      ぶどう
4  渡辺  woman
.      いちご
.      みかん
.      ぶどう

※「.」はレイアウトを整えるためのものです。

■ mts10806さん、Orlofskyさんへのお返事

ご指摘ありがとうございます。至らぬことあり申し訳ありません。
以降、気をつけたいと思います。

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

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

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

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

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

m.ts10806

2019/05/14 09:04

前の質問と全く同じ問題なのでしょうか。 https://teratail.com/questions/188905 そうでないのでしたら質問タイトルはきちんと起きている問題・現象・実現したいことを「具体的に」記載してください。質問内容の要約が理想です。 単に「全く同じタイトルが続くのは後から見たときに何が問題か分からなくなる」のです。
guest

回答3

0

メンバーを一覧で表示させつつ、そこに紐づく好きな(果物)を段を変えて表示させたい

そういった要件は視覚に対するものですから、データ取得後に編集する類のものですね。
よく帳票などで見受けられるものですけど、それには帳票ツールが特化していたりします。

SQLで実現できますけど、それよりかは加工しやすい状態で取得するように腐心した方が良いと思います。

投稿2019/05/14 12:04

sazi

総合スコア25173

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

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

chapp

2019/05/15 09:42

saziさん コメントありがとうございます。 データを取得後に編集すべきとのこと、maisumakunさん、yambejpさんへのお礼でも書き込みましたが、PHP側で整えるとのことで理解いたしました。ありがとうございました。
chapp

2019/05/15 09:48

皆さん同じような意味を持つ回答なので、ベストアンサーを順位付けすることに気が引けるのですが、SQLをご提示いただき、一番お手間を取らせてしまったという点から、yambejpさんをベストアンサーにしたいと思います。 感謝の気持ちは変わりありません。ありがとうございました。
guest

0

、以下のようにメンバーを一覧で表示させつつ、そこに紐づく好きな(果物)を段を変えて表示させたい

表示の加工はPHPで扱うべき範囲です。複数種類のデータを混ぜたような表は、基本的にSQLから直接生成するものではありません。

投稿2019/05/14 09:04

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2019/05/14 10:59

> 表示の加工はPHPで扱うべき範囲です。複数種類のデータを混ぜたような表は、基本的にSQLから直接生成するものではありません。 そういう事を聞いているのでは無いと思うのでちゅ。 まいしゅましゃんらしくないでちゅねぇ…。
chapp

2019/05/15 09:31

maisumakunさん 早々の返信ありがとうございます。 SQLから直接生成するものではないとのこと、ありがとうございます。 SQLで生成すべきことなのか?それとも抽出後、PHPで整えるのか?を知りたかったので助かりました。ありがとうございます。
chapp

2019/05/15 09:32

looperさん コメントありがとうございます。 私の質問がいけなかったようですね。誤解を与えてしまい申し訳ありません。maisumakunさんのような回答は欲しかったのです。問題ありません。 ありがとうございました。
chapp

2019/05/15 09:48

皆さん同じような意味を持つ回答なので、ベストアンサーを順位付けすることに気が引けるのですが、SQLをご提示いただき、一番お手間を取らせてしまったという点から、yambejpさんをベストアンサーにしたいと思います。 感謝の気持ちは変わりありません。ありがとうございました。
guest

0

ベストアンサー

  • 元データ

※同じような質問するなら元データくらいSQL文で提示してください

SQL

1create table member(no int primary key,name varchar(20),sex varchar(20)); 2insert into member values 3(1,'佐藤','man'), 4(2,'伊東','woman'), 5(3,'金井','man'), 6(4,'渡辺','woman'); 7 8create table like_data(data_no int primary key,data_name varchar(20)); 9insert into like_data values 10(1,'いちご'), 11(2,'みかん'), 12(3,'すいか'), 13(4,'ぶどう'), 14(5,'レモン'), 15(6,'バナナ'); 16 17create table like_member (like_no int primary key,like_member_no int,like_data_no int); 18insert into like_member values 19(1,1,2), 20(2,2,2), 21(3,1,3), 22(4,3,3), 23(5,1,4), 24(6,2,4), 25(7,3,4), 26(8,4,1), 27(9,4,2), 28(10,4,4);
  • 検索

SQL

1 2select no,name,sex as val,1 as sort1,0 as sort2 from member 3union all 4select t1.no,t1.name,t3.data_name,2,t2.like_no from member as t1 5inner join like_member as t2 on t1.no=t2.like_member_no 6inner join like_data as t3 on t2.like_data_no=t3.data_no 7order by no,sort1,sort2; 8

表示調整

SQL

1set @no=null,@name=null; 2select 3if(@no=no,'',@no:=no) as no, 4if(@name=name,'',@name:=name) as name, 5val from( 6select no,name,sex as val,1 as sort1,0 as sort2 from member 7union all 8select t1.no,t1.name,t3.data_name,2,t2.like_no from member as t1 9inner join like_member as t2 on t1.no=t2.like_member_no 10inner join like_data as t3 on t2.like_data_no=t3.data_no 11) as sub 12order by sub.no,sub.sort1,sub.sort2;

投稿2019/05/14 09:23

編集2019/05/15 09:52
yambejp

総合スコア114779

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

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

chapp

2019/05/15 09:37

yambejpさん SQLのご提供ありがとうございます。 また至らないところあったようで、すみません。以降気をつけます。 SQL実行させていただきました。ありがとうございます。 やはり抽出後、データを整えるのはPHP側となるのですね。 SQLのご提供もありがとうございます。自分で書こうとしていたSQLと比較し勉強させていただきます。ありがとうございました。
yambejp

2019/05/15 09:53

> データを整えるのはPHP側 サブクエリに突っ込んでしまえばなんとでもなります 表示を調整したバージョン追記しておきました
chapp

2019/05/15 10:01

yambejpさん 再度のご提示ありがとうございます。 初めて目にするSQLです。SQLでこのようなことも出来るのですね。勉強になります。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問