アプリ版:「スタンプのみでお礼する」機能のリリースについて

mysql3.23で、以下のようなテーブルでリスト形式の番号を、対応する他のテーブルのデータにマッチさせて代入する方法を教えてください。

[テーブル1]
'id' | 'type'
1 | 1,2
2 | 1,3,5
3 | 2,4

[テーブル2]
'id' | 'name'
1 | red
2 | blue
3 | yerrow
4 | green
5 | pink

[このように出力したい]
'a.id' | 'b.name'
1 | red,blue
2 | red,yerrow,pink
3 | blue,green

サブクエリなど使えばできるのだと思いますが、
ずっとmysql3.23なので、今まではプログラム側でループさせて出力していましたが、
今回テンポラリーテーブルに挑戦しようと思ったので、テンポラリーテーブルを使って取得する方法があれば、ぜひやり方を教えてください。
お願いします。

A 回答 (1件)

前提がひとつ



テーブル1は、typeがカンマ区切りの文字列になっていますが
これを正規化して
id type
1 1
1 2
2 1
2 3
2 5
3 2
3 4
のようなデータの持ち方をしませんか?
そうでない場合は、かなり非効率的な処理になりSQLでは高速な処理は期待できませんが・・・

この回答への補足

ありがとうございます。
このテーブル1は、実際は

番号(プライマリ/id) | 店舗名(固有のデータ) | 所属カテゴリー(リスト形式のtype) | 住所

のような列になっていて、たとえば店舗が複数のカテゴリーに属している時にtypeはリスト形式になります。そもそもこのようなデータの持ち方が多分、だめなのでしょうか。

プログラム側でループさせるときには、一店舗ごとにループして以下のようなsqlを発行して結果(その店舗の所属カテゴリー)を得ていました。

select * from テーブル1
left join テーブル2 on find_in_set(テーブル2.id,テーブル1.type)

補足日時:2011/01/11 16:18
    • good
    • 0

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