查询MySQL表(PHP)中的多列

davelowe85

我有一个表,其中包含名为:“ ID,跟踪名称,城市,县”的列。我正在寻找一种用户查询数据库并获取与这4列相关的结果的方法,最相关的结果显示在顶部。

假设一行包含:“ 1,轨道号1,陶顿,萨默塞特”,一行包含:“ 2,电路2号,陶顿,萨默塞特”,并且用户搜索了“陶顿赛道”

显然,我希望两行都显示,但是我希望第二行显示在顶部,因为它已经匹配了2个关键字。

这是我正在使用的当前代码,但仅在一列或另一列上起作用,并且如果用户查询“在taunton的卡丁车”,它将无法正常工作。

$searchterm = htmlspecialchars($getArray['searchterm']);
$searchterm = $mysqli->real_escape_string($searchterm);

$terms = explode(' ', $searchterm);
$bits = array();
$cityBits = array();
$countyBits = array();

foreach ($terms as $term) {
    $bits[] = "name LIKE '%".mysql_real_escape_string($term)."%'";
}

foreach ($terms as $cityTerms) {
    $cityBits[] = "city LIKE '%".mysql_real_escape_string($cityTerms)."%'";
}

foreach ($terms as $countyTerms) {
    $countyBits[] = "county LIKE '%".mysql_real_escape_string($countyTerms)."%'";
}

$this->query = "SELECT * FROM tracks WHERE (".implode(' AND ', $bits).")
                union SELECT * FROM tracks WHERE (".implode(' AND ', $cityBits).")
                union SELECT * FROM tracks WHERE (".implode(' AND ', $countyBits).")";

我知道这段代码并不理想,但是目前我已经设法完成了所有工作。

内维尔·库伊特(Neville Kuyt)

首先,与“喜欢”比较相比,您的要求是对全文搜索的匹配要好得多一旦开始运行,您将需要将“ Taunton”提升为“ Aunton”,然后处理不同的拼写,通配符,然后您会注意到,like语句中的通配符会使整个过程变慢。全文搜索可以为您完成所有这些工作,而且速度非常快。

您问题的具体答案令人讨厌。我不愿意给您提供PHP代码,因为我无法轻松对其进行测试。不过,我创建了一个小SQLFiddle以显示如何在SQL中进行操作。

本质上,您需要将单个搜索的“匹配”转换为派生表,并计算每行的条目数;它在派生表中出现的次数越多,就越有可能成为“好”命中项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章