在mysql和rails 3中返回它们之间具有常用单词的记录

时间:2011-04-05 09:58:52

标签: mysql ruby-on-rails

请在rails 3中帮助解决这个mysql查询:

在我的控制器中我有:

@projects = Project.where("name LIKE ?", "%#{params[:search]}%")

如果在“名称”栏下的项目表中,我有以下记录:
1)。水
2)。 aquaduct water bridge
3)。桥梁水道

如果params [:search] =“water”,则返回记录1,2,3。但是当params [:search] =“aquaduct water bridge”时,记录2才会返回。

我需要的是搜索每个单词(如果params [:search]字符串中有很多单词)并返回找到的那些记录。因此,例如,如果params [:search] =“aquaduct water bridge”,它必须返回所有记录,因为水在所有3条记录中都很常见。

我只是用水作为例子。必须适用于记录之间常见的任何单词。

感谢您的帮助,非常感谢。

3 个答案:

答案 0 :(得分:2)

这样做的一个简单方法是拆分params [:search]并进行如下查询:

WHERE name LIKE "%aquaduct%" OR name LIKE "%water%" OR  name LIKE "%bridge%"

但这是效率低下的方法。

尝试使用mysql的MATCH()和AGAINST()方法进行全文搜索。看看链接。

http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

更新:

ALTER TABLE项目ADD FULLTEXT(名称);

答案 1 :(得分:0)

您可以拆分目标字符串,并构造一个where子句。在您给出的示例中,它将是:

WHERE name LIKE "%aquaduct%" OR name LIKE "%water%" OR  name LIKE "%bridge%"

不漂亮,但确实有效。

答案 2 :(得分:0)

我更喜欢@Ashish的方式..并建议,如果你可以使用'范围',你的查询会更加明智

欢呼声

sameera