【发布时间】:2014-03-11 11:18:36
【问题描述】:
我有一个结构如下的数据库:
用户表
ID | firstname | lastname | email
________________________________________________
1 | Carl | Andersson | carl@site.se
2 | Carl | Smith | smith@site.se
3 | Eve | Carlow | carlow@site.se
4 | Randy | Smith | randy@site.se
我需要一个允许我搜索所有字段的搜索功能。 我试过使用像
这样的语句$query = "SELECT * FROM users WHERE firstname LIKE '%" . $KEYWORD . "%' OR lastname LIKE '%" . $KEYWORD . "%' OR email LIKE '%" . $KEYWORD . "%'";
上述方法有效,但结果列表未根据相关性正确排序。
示例 1
如果用户搜索“Carl Andersson”,则不会有匹配项,因为名字和姓氏存储在不同的字段中。
我也尝试过像这样使用 REGEXP:
$KEYWORD = str_replace (" ", "|", $KEYWORD);
$query = "SELECT * FROM users WHERE firstname REGEXP '%" . $KEYWORD . "%' OR lastname REGEXP '%" . $KEYWORD . "%' OR email REGEXP '%" . $KEYWORD . "%'";
示例 2
如果用户搜索“Carl Smith”,用户 1、2、3 都会出现。但是相关顺序会出错。 ID 1 将首先显示,因为此条目是最先找到的条目。
问题: 如何在不丢失命中的情况下搜索所有字段并保留相关顺序?
【问题讨论】:
-
不确定,但您的问题和答案似乎同时发布!这是一个问题吗??
-
不再了,因为我解决了它,但是因为我花了一段时间才弄清楚我想我会分享解决方案!
-
我明白了!我很困惑,因为当页面加载时有一个答案,所以我问,没关系!