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不起作用。因为它只需要一个元素并在 SET/CSV 列中搜索它。2.) 不能使用like concat('%,', user_input , ',%')。因为用户输入可能不按顺序。

还有其他想法吗?我想这是一个非常常见的场景。

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

4

2 回答 2

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 回答
0

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

于 2013-02-25T23:25:30.173 回答