PHP/MySQL 多关键字复杂搜索

标签 php mysql

我在使用 php(或 mysql)搜索功能时遇到了困难。 我愿意为此购买一个脚本,但我找不到。

我有一个客户表(名字、姓氏、街道、 zip 、城市等……) 我希望不仅能够查找一个关键字,而且能够查找 2 IN 2 不同的列。

例如:

关键字:“李四”

所以我的尝试是。

SELECT ....
   WHERE CONCAT(firstname,lastname) LIKE '%john%'
   AND CONCAT(firstname,lastname LIKE '%doe%'

但是:这让我返回了所有的 johns 和 does,而 John Doe 先生在该列表中的某个位置,但不在最前面,尽管它应该是最相关的结果。

我也试过:

....
   WHERE MATCH(firstname,lastname) AGAINST('%john doe%')

这几乎会返回相同的结果。

所以我正在寻找的结果是:

1. John Doe (at first position!)
2. John Miller
3. John Smith
4. Harry Doe
5. Jack Doe
etc......

我已经找了 2 个小时了,我拒绝相信我是第一个尝试这样做的人:-)

感谢任何帮助!

谢谢!

最佳答案

你有没有试过这样的事情

SELECT MATCH(firstname, lastname) AGAINST ('john doe') as Relevance 
FROM table WHERE MATCH(firstname, lastname) AGAINST('john doe' IN
BOOLEAN MODE) 
HAVING Relevance > 0.3
ORDER BY Relevance DESC

另见

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

这也可能是一个解决方案:

SELECT MATCH(firstname) AGAINST ('john doe') as firstname_relevance, 
    MATCH(lastname) AGAINST ('john doe') as lastname_relevance
    FROM table WHERE MATCH(firstname, lastname) AGAINST('john doe' IN
    BOOLEAN MODE) 
    ORDER BY firstname_relevance+lastname_relevance DESC

关于PHP/MySQL 多关键字复杂搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8849489/

相关文章:

php - 为 doctrine2 查询添加所有相关项的计数

php - 异常 : error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure NULL

mysql - 一对多关系中有多少行?

php - CodeIgniter 存储过程的多个结果

mysql - 有没有一种方法可以简单地使用新插入的行id作为MySQL中行列中的值?

php - 表中的行数到整数

mysql - 如何获取 WHERE IN 中传递的每个 ID 的最高和最低结果

PHP - 计数问题算法

PHP 和 MySql 有日期问题...?

PHP sendmail() 格式未保留