如果要基于松散匹配获取结果,则可以执行以下查询:
松散匹配意味着兴趣
135,151
在搜索“13,15”时也会出现。
SET @inputInterest := "13,15";
SELECT
*
FROM userinterests
WHERE interests REGEXP REPLACE(@inputInterest,',','|');
对于给定的数据,您将得到如下输出:
| ID | user | interests |
|----|------|-------------|
| 1 | A | 12,13,15 |
| 2 | B | 10,11,12,15 |
| 3 | C | 9,13 |
SQL FIDDLE DEMO
编辑:
如果您希望得到基于至少一个兴趣的结果,那么您可以使用regex,正如@Andrew在这个答案中提到的那样:
以下是我根据他的见解修改了我的查询:
SET @inputInterest := "13,15";
SELECT
*
FROM userinterests
WHERE interests REGEXP CONCAT('(^|,)(', REPLACE(@inputInterest, ',', '|'), ')(,|$)')
SEE DEMO OF IT
注:
你需要更换
@inputInterest
建议:
Is storing a delimited list in a database column really that bad?