- ベストアンサー
セレクト文について
sqlのセレクト文について質問させて下さい。 フィールドのレコードに、a,b,c,d,eと登録されているデータから、"c"のデータだけをセレクト対象にしたい場合、どのようにsqlを書けばよいのでしょうか? 通常のセレクト文だと、WHERE句に、(フィールド名 = '値')などで格納されている値とデータの比較ができるかと思うのですが、上記のような場合はどのように指定するのでしょうか? フィールドを無駄に増やし過ぎないよう、カテゴリごとに配列をjoinでまとめたものをDBへ登録しているのですが、この場合だとイメージしているようなことは無理なんでしょうか? 宜しくお願い致します。
- みんなの回答 (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文はレコード数が増えると極端に遅くなることを付け加えておきます。
その他の回答 (1)
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
基本的には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で用意されていれば配列型を使ってもいいかも この辺のどれかを考える必要があるんじゃないでしょうか。
お礼
貴重なご意見ありがとうございます!お返事が遅くなってしまったこと誠に申し訳ありません。どうもありがとうございました!
お礼
お返事が大変遅くなってしまい申し訳ありませんm(_ _)m 教えていただいた方法でイメージどおりの動作をすることができました。 ありがとうございます!