我有一个表,其中包含名为:“ 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).")";
我知道这段代码并不理想,但是目前我已经设法完成了所有工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句