• ベストアンサー

セレクト文について

sqlのセレクト文について質問させて下さい。 フィールドのレコードに、a,b,c,d,eと登録されているデータから、"c"のデータだけをセレクト対象にしたい場合、どのようにsqlを書けばよいのでしょうか? 通常のセレクト文だと、WHERE句に、(フィールド名 = '値')などで格納されている値とデータの比較ができるかと思うのですが、上記のような場合はどのように指定するのでしょうか? フィールドを無駄に増やし過ぎないよう、カテゴリごとに配列をjoinでまとめたものをDBへ登録しているのですが、この場合だとイメージしているようなことは無理なんでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

+---+-----+ | key| csv | +---+-----+ |  1|a,b,c,d,e| |  2|h,o,g,e | |  3|m,o,g,e | +---+-----+ こんな感じで入っているということですかね。 で、取り出したいのは「cが含まれているデータ」ってことですかね。 とすれば select * from テーブル where csv like '%c%' ですな。違ったらごめんなさいということで。 // like文はレコード数が増えると極端に遅くなることを付け加えておきます。

tarou_hana
質問者

お礼

お返事が大変遅くなってしまい申し訳ありませんm(_ _)m 教えていただいた方法でイメージどおりの動作をすることができました。 ありがとうございます!

その他の回答 (1)

回答No.1

基本的にはjoinした文字列はsplitしてやる必要があると思います。 1.phpでsplitする   $a = split(",", $data['column_name']);   echo $a[2]; 2.使用しているDBで用意されていればSQL上でもいいかも   SELECT split_part(column_name, ',', 3) FROM table_name;(postgre) 3.使用しているDBで用意されていれば配列型を使ってもいいかも この辺のどれかを考える必要があるんじゃないでしょうか。

tarou_hana
質問者

お礼

貴重なご意見ありがとうございます!お返事が遅くなってしまったこと誠に申し訳ありません。どうもありがとうございました!

関連するQ&A