我有一个包含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
)。 (可能无关紧要,但只是一个信息)
答案 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查询的直接解决方案。所以我想我将不得不通过多个查询或循环来处理这个问题。