MySQL - 以CSV列搜索CSV

时间:2013-02-25 21:35:34

标签: mysql sql search csv

我有一个包含CSV列的表格。

TableA:

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

现在我需要获得与给定csv的用户匹配的field_id。因此,例如,用户字符串是1,4,11,那么它应该返回一些值可能只是true

1。)Find_in_set不起作用。因为它只需要一个元素并在SET / CSV列中搜索。 2.)不能使用like concat('%,', user_input , ',%')。因为用户输入可能不是有序的。

还有其他想法吗?我想这是一种非常常见的情况。

注意:我不需要搜索所有记录。我需要搜索特定的记录。所以在上表中,我只需要搜索一个field_id = 1的记录。即(where field_id = 1)。 (可能无关紧要,但只是一个信息)

2 个答案:

答案 0 :(得分: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
     . . .

对于userinput集中可能包含的许多值,请执行此操作。

答案 1 :(得分:0)

我认为没有像Find_In_Set这样的MySQL查询的直接解决方案。所以我想我将不得不通过多个查询或循环来处理这个问题。