我需要从具有WHERE
条件且具有多个LIKE
组合的表中提取行,
我的意思是,例如,我在表格中有一个字段description
,它有两行
1. 'abc def hij klm'
2. 'opq rst uvw xyz'
我的搜索文字为abc rst
。所以我需要一个LIKE
条件的查询必须生成两个行,因为第一行包含字符串abc
,第二行包含rst
。我知道我可以在两个OR
条件之间使用LIKE
,但如果搜索文本太长,因为它有更多的单词,我该怎么办?
答案 0 :(得分:0)
这可能有点痛苦,但一种方法是使用like和substring_index()
where concat(' ', description, ' ') like concat('% ', substring_index(@SearchString, ' ', 1), ' %') and
concat(' ', description, ' ') like concat('% ', substring_index(substring_index(@SearchString, ' ', 2), ' ', -1), ' %') and
concat(' ', description, ' ') like concat('% ', substring_index(substring_index(@SearchString, ' ', 3), ' ', -1), ' %') and
concat(' ', description, ' ') like concat('% ', substring_index(substring_index(@SearchString, ' ', 4), ' ', -1), ' %')
嵌套的substring_index()
返回列表的第n项。
如果您正在寻找真实代码的代码只是在description
字段中汇总,那么您的数据库设计就会很糟糕。每个代码都需要一个包含单行的关联表。
如果描述确实是文本描述,那么您可能真的需要全文索引。这可以使用match . . . against
解决您的问题。