如何从多个类似组合的MySQL数据库中获取行?

时间:2013-07-27 09:28:48

标签: mysql

我需要从具有WHERE条件且具有多个LIKE组合的表中提取行,

我的意思是,例如,我在表格中有一个字段description,它有两行

1. 'abc def hij klm'
2. 'opq rst uvw xyz'

我的搜索文字为abc rst。所以我需要一个LIKE条件的查询必须生成两个行,因为第一行包含字符串abc,第二行包含rst。我知道我可以在两个OR条件之间使用LIKE,但如果搜索文本太长,因为它有更多的单词,我该怎么办?

1 个答案:

答案 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解决您的问题。