我使用两个列(名称和姓氏)创建了一个搜索应用程序,但是当一个人有两个以上的名字时就不能工作了。我如何搜索一个有三个名字和姓氏的人?
主计长:
class PersonController < ApplicationController
def search
@people = Person.find(:all,:conditions=>["(
name LIKE ? OR
lastname LIKE ? OR
(concat(name, \" \", lastname) LIKE ? )
)" ,
"%#{params[:query]}%",
"%#{params[:query]}%",
"%#{params[:query]}%" ]
)
end
end视图
<% form_tag :controller=>"person",:action=>"search" do %>
Nombre o Apellido
<%= text_field_tag "query", params[:query]
<% end %>示例
|name| |Lastname|
Marcos Ignacio Raul Perez我在日志上看到:如果我搜索马科斯·伊格纳西奥·劳尔·佩雷斯,那是可行的。
SELECT * FROM `people`
WHERE ((
name LIKE '%Marcos Ignacio Raul Perez%' OR
lastname LIKE '%Marcos Ignacio Raul Perez%'
OR (concat(name, " ", lastname) LIKE '%Marcos Ignacio Raul Perez%' )
)) 如果我搜索伊格纳西奥·劳尔·佩雷斯
SELECT * FROM `people`
WHERE ((
name LIKE '%Ignacio Raul Perez%' OR
lastname LIKE '%Ignacio Raul Perez%'
OR (concat(name, " ", lastname) LIKE 'Ignacio Raul Perez%' )
)) 如果我搜索劳尔·佩雷斯
SELECT * FROM `people`
WHERE ((
name LIKE '%Raul Perez%' OR
lastname LIKE '%Raul Perez%'
OR (concat(name, " ", lastname) LIKE 'Perez%' )
)) 如果我搜索马科斯·佩雷斯
SELECT * FROM `people`
WHERE ((
name LIKE '%Marcos Perez%' OR
lastname LIKE '%Marcos Perez%'
OR (concat(name, " ", lastname) LIKE '%Marcos Perez%' )
)) 如果我搜索伊格纳西奥·佩雷斯
SELECT * FROM `people`
WHERE ((
name LIKE '%Ignacio Perez%' OR
lastname LIKE '%Marcos Perez%'
OR (concat(name, " ", lastname) LIKE '%Ignacio Perez%' )
))如果我搜查马科斯·劳尔·佩雷斯
SELECT * FROM `people`
WHERE ((
name LIKE '%Marcos Raul Perez%' OR
lastname LIKE '%Marcos Raul Perez%'
OR (concat(name, " ", lastname) LIKE '%Marcos Raul Perez%' )
)) 我真的很感激你的帮助。
发布于 2013-10-04 16:26:47
我强烈建议使用elasticsearch与轮胎,宝石或类似的东西,而不是SQL。看起来你的搜索要求很复杂。SQL中的搜索出现了问题,这表明底层应用程序体系结构中缺少功能。
发布于 2013-10-22 21:56:54
您可以使用sphinx是rails搜索的好宝石。
https://stackoverflow.com/questions/19185881
复制相似问题