gpt4 book ai didi

php - 查询 MySQL 表中的多列 (PHP)

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:34 27 4
gpt4 key购买 nike

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

假设有一行:“1, Track Number One, Taunton, Somerset”和一行:“2,二号电路,汤顿,萨默塞特”并且用户搜索了“汤顿赛道”

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

这是我当前使用的代码,但它只适用于一列或另一列,如果用户查询“karting in 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).")";

我知道这段代码并不理想,但目前我已经设法开始工作了。

最佳答案

首先,您的要求更符合 full text searching而不是“喜欢”的比较。一旦你开始工作,你就会想要提升“Taunton”而不是“Aunton”,然后处理不同的拼写、通配符,然后你会注意到 like 语句中的通配符会减慢整个过程。全文搜索可以为您完成所有这些工作,而且速度非常快。

你的问题的具体答案很糟糕;我不愿意给你代码 PHP 代码,因为我不能轻易地测试它。我创造了一点 SQLFiddle不过,要展示如何在 SQL 中执行此操作。

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

关于php - 查询 MySQL 表中的多列 (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25326805/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com