- ベストアンサー
MySQL/PHP IN文の使い方と問題解決方法
- MySQL/PHPのIN文は、特定の値がリスト内に含まれているかどうかを判定するための便利な方法です。
- 通常はリスト内の値を指定してSELECT文を作成しますが、逆に特定の値がリスト内に含まれているかをチェックすることもできます。
- PHPやSQLを使用して、column1の値がリスト内に含まれているかどうかを判定する方法を学びましょう。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こういうことでしょうかねぇ? create table tableA(id int,columns varchar(100)); insert into tableA values(1,'1,4,7,3'),(2,'5,3,22'),(3,'1,2,3'),(4,'2,3,1'),(5,'1'),(6,'4,4,4'); ※id=2は22はあっても2は含まれない、id=3や4はid=1の順番違い id=5のように単一データや、id=6のような同じデータを複数もつ場合も想定 「1」を対象とする SELECT id FROM tableA WHERE columns REGEXP '(^|,)1(,|$)' id=1,3,4,5がヒットします 「2」を対象とする SELECT id FROM tableA WHERE columns REGEXP '(^|,)2(,|$)'; id=3,4がヒットします(22はヒットしません) 「3」か「4」を対象とする SELECT id FROM tableA WHERE columns REGEXP '(^|,)(3|4)(,|$)'; ・・・とここまで書いて言うのもなんですが カンマ区切りでデータを持つのはSQL的には最悪です。 きちんとデータ分けて処理することをお勧めします。
その他の回答 (1)
- o_chi_chi
- ベストアンサー率45% (131/287)
こういうことでしょうか? --- SELECT * FROM tables WHERE INSTR(column1 ,value1) > 0;
お礼
ありがとうございます。 仰った方法では たとえばcolumn1の内容が 5,3,22 であれば value1が2でしたら、含まれていると判定してしまうのではないでしょうか? column1 が 5,3,22 であれば、 5か3か22が正解で、ほかの値を拒否するようにしたいのですが、これをどうすれば実装できるのでしょうか? 御手数ですが、またよろしくお願いします。
お礼
ありがとうございます!おかげ解決できました。