【发布时间】:2011-06-24 18:32:55
【问题描述】:
嗨,
我有一个表格,其中有几列,其中包含姓名、地址、公司等字段。假设有人搜索“microsoft john”。我希望首先出现包含“microsoft”的结果,然后是包含 john.如果查询是“john microsoft”,反之亦然
我的php代码是:
$searchitems=explode(" ", $trimmed);
//print_r($searchitems);
$so = $_GET['so']=='2'?"2":"1";
$clause = $so=='2'?"AND":"OR";
include("dbconnect.php");
// Build SQL Query
$query = "select FirstName,LastName,course,Department,batch,City,companyjob,companylocation,
companyposition,coursename,institutename,coursename2,institutename2,coursename3,
institutename3 from alumni WHERE ";
for($i=0;$i<count($searchitems);$i++)
{
$queryappend .= "(FirstName LIKE '".$searchitems[$i]."%' OR LastName LIKE '".$searchitems[$i]."%'
OR City LIKE '".$searchitems[$i]."%' OR CountryorRegion LIKE '".$searchitems[$i]."%'
OR companyjob LIKE '".$searchitems[$i]."%' OR companylocation LIKE '".$searchitems[$i]."%'
OR coursename LIKE '".$searchitems[$i]."%' OR institutename LIKE '".$searchitems[$i]."%'
OR coursename2 LIKE '".$searchitems[$i]."%' OR institutename2 LIKE '".$searchitems[$i]."%')";
if($i<count($searchitems)-1) $queryappend .= $clause;
}
$query .=$queryappend;
问题是 MYSQL 是按 id 排序结果...这很有趣,因为一些更高价值的结果可能会卡在堆栈的深处。顺便说一句,phpmyadmin 搜索也有同样的缺陷。
请提出建议。
【问题讨论】:
-
不确定这是 PHP 还是 phpmyadmin 的缺陷。我在您的语句中根本没有看到 任何 ORDER BY 子句,因此返回的订单将始终是纯粹任意的(甚至不保证是通过 id)
-
感谢马克的回复。我需要按搜索查询中的单词序列排序。正如我在示例中所说,如果第一个 $searchitems 是 microsoft,则应首先显示所有包含 microsoft 的结果。 (微软结果可能会进一步按下一个 $searchitems 排序,依此类推)。我不能添加任何任意顺序,因为这会破坏目的。
-
您提到的页面stackoverflow.com/questions/344199/… 只是要求从查询字符串中搜索单个单词。我通过使用 explode() 函数实现了这个效果
-
哇,这就是我所说的穷人的全文搜索......好吧,在支付了你的专用搜索服务器场的每月账单之后,你肯定会很穷:)
-
@sfussenegger 你的意思是我应该跳到全文搜索和这些复杂的东西?就时间和空间复杂性而言,这是否会降低成本?
标签: php mysql search relevance