在mysql中搜索长字符串中的关键字?

时间:2010-04-20 17:14:10

标签: php mysql

keyword = house

SELECT * FROM products WHERE description LIKE '%house%'

此查询还会返回包含关键字的记录,例如法院,但我只想找房子。如何仅在“房屋”的描述中的任何地方进行搜索?

感谢。

更新

只是为了更加澄清..

actually house, can be at 
  -  the start of the description .. "House for sale..", 
  -  can be quoted -- "house", 'house'
  -  can have exclamation .. house!!!, house!
  - others - house? etc .. 

这就是我使用%house%

的原因

5 个答案:

答案 0 :(得分:2)

你在寻找包含整个单词的长篇字符串吗?

Search for "whole word match" in MySQL

答案 1 :(得分:1)

之前和之后的%会搜索搜索关键字之前和之后的所有匹配文字,请尝试使用以进行精确搜索:

SELECT * FROM products WHERE description = 'house'

答案 2 :(得分:1)

SELECT * FROM products WHERE description rlike'[[:<:]] house [[:>:]]'

rlike是REGEXP的synonim。

[[:<:]]表示单词的开头和
[[:>:]]这个词的结尾。

它适用于您的所有要求(不区分大小写,引用的单词或单词结尾,或者用感叹号和其他非字母字符乞讨)

答案 3 :(得分:0)

尝试使用关键字周围的空格:

SELECT * FROM products WHERE description LIKE '% house %' OR description LIKE 'house %' OR description LIKE '% house' OR description LIKE '% house%'

编辑:在搜索中添加了更多选项。最后一个允许house.house,,但housecat之类的内容也会匹配。正则表达式在这里工作得最好。这个解决方案来自Astandar,他删除了他的答案。

答案 4 :(得分:0)

简单的东西只有房子意味着,使用这个

   SELECT * FROM products WHERE description = 'house'

如果你想要在背后包含房子的任何单词意味着使用这个,

   SELECT * FROM products WHERE description LIKE '%house'

如果你想要在前端包含house的任何单词意味着使用它,

   SELECT * FROM products WHERE description LIKE 'house%'

如果你想在描述中的任何地方包含任何单词,请使用此,

   SELECT * FROM products WHERE description LIKE '%house%'