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

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

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

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

Q&A

解決済

2回答

1428閲覧

テーブルの結合について

ssk

総合スコア332

MySQL

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

0グッド

0クリップ

投稿2016/03/07 11:39

テーブル1とテーブル2を結合して、データをSELECTしたいです。

【テーブル1】
shop_id
sample1
sample2

【テーブル2】
shop_id
other1
other2

【困っていること】
テーブル1のshop_idに対する情報?はテーブル1に1行で書いています。
しかし、テーブル2は登録の際に不特定多数のケースがあるため、shop_idに対する情報が複数行になります。

例)テーブル2
shop_id other1 other2
001 text1 text1
001 text2 text2

$rec = $stmt->fetch(PDO::FETCH_ASSOC);
を使って、1行ずつ抽出しているのですが非効率な気がしています。

良い方法はありませんか?
ご教授下さい。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/03/07 12:47

具体的に 取得したい結果を提示頂ければ、回答が得られやすいと思います。 例として https://teratail.com/questions/25825
ssk

2016/03/08 02:18

情報ありがとうございます。 PHP側で出力を制御することにしました。 サポートしてくださり、ありがとうございます。
guest

回答2

0

ベストアンサー

【テーブル1】 の件数 X 【テーブル2】 の件数 = 合計件数
がまずメモリにロードされます。
遅くなるんでは?

SELECT * FROM 【テーブル1】t1 INNER JOIN 【テーブル2】t2 ON t1.shopid = t2.shopid LIMIT 10;
このSQLで何秒かかりますか?

今の方法が、最速の処理なのかなーと感じます。

投稿2016/03/07 11:44

編集2016/03/07 11:48
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ssk

2016/03/07 12:21

0.0027秒でした。 whileで1行ずつ取り出す時に1行目だけテーブル1の情報をセレクトして、それ以降はテーブル2の情報だけをセレクトしたいと考えていました。 >今の方法が、最速の処理なのかなーと感じます。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/03/07 12:24

速いですね。 この速度なら結合しても、遅くなることなく、改修が可能です。
guest

0

単純に結合するだけであればJOINを使用することで可能です。
JOIN句は [INNER JOIN]、[LEFT JOIN]、[RIGHT JOIN]、[FULL OUTER JOIN]などがあり、
目的に応じて使い分けます。

SQL

1SELECT 2 [テーブル1].[shop_id] 3 , [テーブル1].[sample1] 4 , [テーブル1].[sample2] 5 , [テーブル2].[other1] 6 , [テーブル2].[other2] 7FROM [テーブル1] 8LEFT JOIN [テーブル2] 9ON [テーブル2].[shop_id] = [テーブル1].[shop_id] 10

これで[テーブル1]の1行に対し、[テーブル2]のデータが複数紐づけられた結果が得られますが、
その後にどのような処理を掛けるかによって、効率的かどうかは変わってしまいますね

以上、
ご参考になりますでしょうか?

投稿2016/03/07 11:51

編集2016/03/07 11:53
Aeona

総合スコア396

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

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

ssk

2016/03/07 12:23

ありがとうございます。 PHPの側で制御するしか方法はなさそうですか? ショップ情報を1件1件出力したいです。その際に2行目以降のテーブル1の情報が邪魔でして><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問