初心者です。
ちょっと伝えずらいのですが、
下記のようなテーブル構造になっています。
■tableA
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 1 | test1 | aaaaaaaaaa |
| 2 | test2 | bbbbbbbbbbbb |
+----+-------------------+------------------------------------------+
■tableB
+----+-------------------+------------------------------------------+
| id | name | sex |
+----+-------------------+------------------------------------------+
| 1 | taro | men |
| 2 | yoko | women |
+----+-------------------+------------------------------------------+
■tableC
+----+-------------------+------------------------------------------+
| id | num | order_id |
+----+-------------------+------------------------------------------+
| 1 | 33 | 1 |
| 2 | 66 | 2 |
+----+-------------------+------------------------------------------+
■tableD
+-------------------+------------------------------------------+
| icons | order_id |
.+-------------------+------------------------------------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 5 | 1 |
| 1 | 2 |
| 3 | 2 |
+-------------------+------------------------------------------+
tableA,B,Cのidを軸にデータを表示したいのですが、
---------------------------------------------------------
tableA.id , body , name , sex , num , order_id
FROM tableA , tableB , tableC
WHERE
tableA.id = tableB.id AND
tableA.id = tableC.id
----------------------------------------------------------
で出力できました。
で、tableDのiconsの内容も出力したいのですが、
---------------------------------------------------------
tableA.id , body , name , sex , num , order_id , icons
FROM tableA , tableB , tableC
WHERE
tableA.id = tableB.id AND
tableA.id = tableC.id AND
tableC.order_id = tableD.order_id
----------------------------------------------------------
でやると、2行しかデータがでないはずなのですが、
6行出力されてしまいます。
たぶん、tableDのデータの持ち方が、
ひとつのidに複数のiconsがある場合は、
行ごとにレコードを分けているためだと思いますが・・・
tableDの行分、6行でているのです。。
なので、期待する結果は、
ちゃんとidの数分だけ出力されて、
同order_idにiconsが複数ある場合は、
行ごとに分かれるのではなく、
ひとつのカラム?にカンマ区切りなどで
入れたいのですがどうしたらよいでしょうか??
↓期待する結果
-----------------------------------------------------------------------
+----+-------------------+------------------------------------------+
| id | title | body | order_id | icons
+----+-------------------+------------------------------------------+
| 1 | test1 | aaaaaaaaaa | 1 |1,2,3,5
| 2 | test2 | bbbbbbbbbbbb | 2 | 1,3
+----+-------------------+------------------------------------------+
※カンマじゃなくてもいいです
わかりづらくて申し訳ありませんが、
ご教授お願いいたします。
MySQL 5.0.90-log
ちなみにec-cubeの高度な設定の
csvを吐き出す部分で使用しています。
No.1ベストアンサー
- 回答日時:
group_concatを使ってみてください
select tableA.id , body , name , sex , num , tableC.order_id , group_concat(icons order by icons) as icons
FROM tableA , tableB , tableC ,tableD
WHERE
tableA.id = tableB.id AND
tableA.id = tableC.id AND
tableC.order_id = tableD.order_id
group by tableA.id , body , name , sex , num , tableC.order_id
ありがとうございます!
実は、実際は、カラムがものすごい量があって、
group by tableA.id , body , name , sex , num , tableC.order_id
の部分は全部入れないといけないものなのでしょうか??
ただだいぶいいところまで来ました!!
No.3
- 回答日時:
解決しているみたいですが
create index idx_order_id on tableD ( order_id, icons );
で索引つくって
select
tableA.id , tableA.body , tableB.name , tableB.sex ,
tableC.num , tableC.order_id,
group_concat(tableD.icons order by icons)
FROM tableA inner join tableB
on tableA.id = tableB.id
inner join tableC
on tableA.id = tableC.id
inner join tableD
on tableC.order_id=tableD.order_id
group by tableD.order_id;
実行計画を比較してみてください。
No.2
- 回答日時:
ごめんなさい、手を抜きすぎた。
こんな感じでどうですか?
select tableA.id , body , name , sex , num , tableC.order_id ,icons
FROM tableA , tableB , tableC
, (SELECT order_id, group_concat(icons order by icons) as icons
FROM tableD
group by order_id) AS D
WHERE tableA.id = tableB.id
AND tableA.id = tableC.id
AND tableC.order_id = D.order_id
この回答への補足
すいません、、、
: Unknown column 'order_id' in 'field list']
というエラーが出てしまいました。。。
ためしに、tableAをつけてみたんですが、
: Unknown column 'tableA.order_id' in 'field list']
となってしまいました。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- その他(データベース) accessについて 2 2022/05/31 16:58
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
VIEWの元のテーブルのindexって...
-
insertを高速化させたい
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
一つ前のレコードの値と減算し...
-
SQLサーバから、項目の属性(型...
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
-
期間の重複を調べるSQL文につい...
-
テーブル名を省略して「h.id」...
-
SELECT~LIKE~の結果が変
-
[MySQL] UNIQUE制約の値を更新...
-
1テーブル&複数レコードの更新...
-
マイクラPC版のコマンドで効率...
-
URL と行番号の指定
-
副問合せの書き方について
-
上位3位を求めるSQL文は?
-
SQLにて特定の文字を除いた検索...
-
mysqlのload data infileで連番...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報