请在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条记录中都很常见。
我只是用水作为例子。必须适用于记录之间常见的任何单词。
感谢您的帮助,非常感谢。
答案 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