次のようにデータを格納するテーブル ITEM が MySQL にあります。
ID FEATURES
--------------------
1 AB,CD,EF,XY
2 PQ,AC,A3,B3
3 AB,CDE
4 AB1,BC3
--------------------
入力として、"AB,PQ" のような CSV 文字列を取得します。AB または PQ を含むレコードを取得したい。これを実現するには、MySQL 関数を作成する必要があることに気付きました。したがって、これを行う魔法の関数 MATCH_ANY が MySQL で定義されている場合、次のように単純に SQL を実行します。
select * from ITEM where MATCH_ANY(FEAURES, "AB,PQ") = 0
上記のクエリは、レコード 1、2、および 3 を返します。
しかし、MySQL は配列をサポートしておらず、区切り文字に基づいて文字列を分割する簡単な方法がないことに気付いたため、この関数を実装しているときにあらゆる種類の問題に遭遇しています。
テーブルの改造は、多くの問題を伴うため、私にとって最後のオプションです。
次のような複数の MATCH_ANY 関数を含むクエリを実行することもできます。
select * from ITEM where MATCH_ANY(FEATURES, "AB,PQ") = 0 and MATCH_ANY(FEATURES, "CDE")
上記の場合、レコード (1, 2, 3) と (3) の共通部分はちょうど 3 になります。
どんな助けでも大歓迎です。
ありがとう