数据库 - 最好的方法,如何搜索名称

时间:2011-07-26 07:34:43

标签: mysql database search

我现在正在解决以下情况: 在我的数据库表中,我有名称和姓氏的列。

在我的页面上,我有搜索人员的输入,我正在努力解决问题,如何在数据库中搜索存储在两列中的名称,并将名称作为字符串("Joe Green")。< / p>

例如,在数据库中我有以下内容:

Joe New
Joe Blue
Joe Green
Joe Francois Green

什么是最好的方法,这个问题怎么解决?我目前正在使用MySQL数据库和Rails 3。

编辑:谢谢各位回复,但我不知道,如何使用Rails 3表示法进行查询,是否可以使用“concat”?

5 个答案:

答案 0 :(得分:6)

如果您的数据库表引擎 myISAM ,请使用 FULLTEXT search

首先按

创建 FULLTEXT 索引
CREATE FULLTEXT INDEX fx_name ON pages (name, surname)

然后使用以下查询来检索所需数据

SELECT  *
FROM    table
WHERE   MATCH(name,surname) AGAINST ('keyword' IN BOOLEAN MODE)

更新

替代方案:使用CONCAT

首先创建索引

CREATE INDEX users_firstandlast ON users(name, surname);

option1:重复CONCAT子句中的WHERE(因为AS不会创建可在WHERE子句中使用的名称):

SELECT CONCAT(name, ' ', surname) as fullname 
FROM users 
WHERE CONCAT(name, ' ', surname) LIKE '%joe green%';

选项2:

SELECT CONCAT(name, ' ', surname) as fullname 
FROM users 
WHERE name LIKE '%joegreen%' or surname LIKE '%joegreen%';

<强> More information

答案 1 :(得分:1)

一种方法是:
*将用户输入分为单词
*搜索名称和姓氏列中的每个单词

答案 2 :(得分:1)

首先使用split函数拆分字符串

  

namearr = name.split

namestr = ""
namearr.each do |i|
  namestr = namestr + i
end

然后使用查询中的值

  

stmt =“select * from mytable where CONCAT(firstname,surename)=”+ namestr

答案 3 :(得分:1)

你可以使用我不推荐的sql server全文搜索,因为性能非常差,或者使用更强大的lucin .net,她是一些链接: http://incubator.apache.org/lucene.net/

http://msdn.microsoft.com/en-us/library/ms142571.aspx

如果有帮助则标记为已回答:)

答案 4 :(得分:1)

如果您已经在输入和数据库之间的接口上使用了什么语言(由于Rails通常与Ruby相关联,我认为你的意思是这样),这很明显会很简单。 ....

SELECT *
FROM yourtable
WHERE CONCAT(name, ' ', surname) 
      LIKE CONCAT('%',REPLACE(?,' ', '%'),'%')
ORDER BY LEVENSTEIN(CONCAT(name, ' ', surname), ?)

(其中'?'由搜索字符串替换,levenstein function is described here

性能会很差 - 更好的解决方案是将字符串Ruby拆分并尝试不同组合的匹配。