1

CSV を持つ列を持つテーブルがあります。

TableA:

field_id  |  matches
---------------------
   1         1,2,4,6,8,11,14,56

field_idここで、csv を指定してユーザーに一致するを取得する必要があります。したがって、たとえば、ユーザー文字列が1,4,11である場合、値が単に である可能性がありますtrue

1.)Find_in_set機能しません。要素を 1 つだけ取り、それを SET/CSV 列で検索するためです。2.) 使用できませんlike concat('%,', user_input , ',%')。ユーザーの入力が正しくない可能性があるためです。

他のアイデアはありますか?これは非常に一般的なシナリオだと思います。

注: すべてのレコードを検索する必要はありません。特定のレコードを検索する必要があります。したがって、上の表では、 を持つ 1 つのレコードを検索するだけで済みますfield_id = 1。すなわち ( where field_id = 1)。(関係ないかもしれませんが、参考までに)

4

2 に答える 2

0

のようなMySQLクエリを使用した直接的な解決策はないと思いますFind_In_Set。したがって、複数のクエリまたはループでこれを処理する必要があると思います。

于 2013-02-25T23:25:30.173 に答える
0

これは、適切なリレーショナル形式のデータを持つための良い議論です。ただし、試すことができます:

select t.*
from t
where (find_in_set($user_input, 1) = 0 or
       find_in_set(substring_index(substring_index($user_input, ',', find_in_set($user_input, 1)), ',', -1), matches) > 0) and
      (find_in_set($user_input, 2) = 0 or
       find_in_set(substring_index(substring_index($user_input, ',', find_in_set($user_input, 2)), ',', -1), matches) > 0) and
     . . .

ユーザー入力セットに含まれる可能性のある多くの値に対してこれを行います。

于 2013-02-25T22:18:45.080 に答える