我创建了一个使用2列(名称和姓氏)的搜索应用程序,但是当一个人拥有2个以上的名字时,它不起作用。如何搜索具有3个姓名和姓氏的人?
控制器:
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%' )
))
如果我搜索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%' )
))
如果我搜索Raul Perez
,则可以使用 SELECT * FROM `people`
WHERE ((
name LIKE '%Raul Perez%' OR
lastname LIKE '%Raul Perez%'
OR (concat(name, " ", lastname) LIKE 'Perez%' )
))
如果我搜索Marcos Perez
,则无效 SELECT * FROM `people`
WHERE ((
name LIKE '%Marcos Perez%' OR
lastname LIKE '%Marcos Perez%'
OR (concat(name, " ", lastname) LIKE '%Marcos Perez%' )
))
如果我搜索Ignacio Perez
,则无效 SELECT * FROM `people`
WHERE ((
name LIKE '%Ignacio Perez%' OR
lastname LIKE '%Marcos Perez%'
OR (concat(name, " ", lastname) LIKE '%Ignacio Perez%' )
))
如果我搜索Marcos Raul Perez
,则无效 SELECT * FROM `people`
WHERE ((
name LIKE '%Marcos Raul Perez%' OR
lastname LIKE '%Marcos Raul Perez%'
OR (concat(name, " ", lastname) LIKE '%Marcos Raul Perez%' )
))
我真的很感激帮助。
答案 0 :(得分:2)
我强烈建议使用带有轮胎宝石的弹性搜索或类似的东西而不是SQL。看起来您的搜索要求很复杂。您在SQL中进行搜索时遇到的问题表明底层应用程序架构中缺少功能。
答案 1 :(得分:0)
你可以使用Thinking sphinx是rails搜索的好宝石