查询字符串或文本的一部分

时间:2013-02-18 17:18:03

标签: mysql ruby-on-rails

使用Rails和MySQL。不确定是否有人问过,但无法找到它。

我有以下记录:

1. I love Rails
2. I love Django
3. I code using Ruby on Rails

====

(1)搜索:"我爱"

结果:" 我喜欢 Rails"," 我喜欢 Django"

====

(2)搜索:"爱"

结果:"我 Rails","我 Django"

====

(3)搜索:" ails"

结果:"我喜欢Rails","我使用Ruby on Rails进行编码"

====

(4)搜索:"代码Ruby"

结果:"我使用Ruby on Rails进行编码"

====

我的代码是:

term = "%#{params[:term]}%"
shops = Shop.where("name LIKE ?", term)

它仅适用于搜索(1)和(2)。在进行搜索(3)和(4)时,我如何编码以获得结果?

非常感谢。

2 个答案:

答案 0 :(得分:2)

我认为你需要使用通配符(在原始SQL中)

LIKE '%ails'

或更一般地说:

LIKE '%substring%'

答案 1 :(得分:0)

找到了解决方案。

我需要使用%string%将搜索词组中的每个单词换行。

====

搜索(1):“我爱”

查询:SELECT * from t WHERE name LIKE "%i% %love%";

结果:“我爱Rails”,“我爱Django”

====

搜索(2):“爱”

查询:SELECT * from t WHERE name LIKE "%love%";

结果:“我爱Rails”,“我爱Django”

====

搜索(3):“ails”

查询:SELECT * from t WHERE name LIKE "%ails%";

结果:“我喜欢Rails”,“我使用Ruby on Rails进行编码”

====

搜索(4):“代码Ruby”

查询:SELECT * from t WHERE name LIKE "%code% %Ruby%";

结果:“我使用Ruby on Rails进行编码”

====

我的Ruby代码应该是:

term = "#{params[:term]}"
f_term = term.gsub /\b/, '%'
shops = Shop.where("name LIKE ?", f_term)

您可以在http://sqlfiddle.com/#!2/d63f5/4

进行测试