gpt4 book ai didi

php - SQL 使用分隔符获取所有可能的结果

转载 作者:行者123 更新时间:2023-11-29 18:18:08 26 4
gpt4 key购买 nike

我有一个包含相似单词列表的数据库。我需要获得相似的单词,我正在尝试这种方法来获取每个相似的单词:

  1. 我在 mysql 查询上使用 LIKE 来获取相似的单词。
  2. 使用 LIKE 是不够的,所以我用 % 来制作每个可能的字符串以获得更相似的结果。我不知道,也找不到是否有任何类似的替代方案来查找更多相关的查询。

例如,要查找类似的单词,如“EL”,我使用以下查询:

SELECT * FROM `words` WHERE word LIKE 'el' OR word LIKE '%el' OR word LIKE '%el%' OR word LIKE '%e%l%'

它只返回一个结果,这不是我想要的。但是,如果我使用 multi_query 和多个查询,例如:

SELECT * FROM `words` WHERE word LIKE 'el';
SELECT * FROM `words` WHERE word LIKE '%el';
SELECT * FROM `words` WHERE word LIKE '%el%';
SELECT * FROM `words` WHERE word LIKE '%e%l%';

为了获取这些,我使用:

if ($con->multi_query($query)) {
do {
/* almacenar primer juego de resultados */
if ($result = $con->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
/* mostrar divisor */
if ($con->more_results()) {
printf("-----------------\n");
}
} while ($con->next_result());
}

/* cerrar conexión */
$con->close();

这些是我得到的(示例/类似)结果:

el、espinel、el、车轮、espinel、车轮

它将得到所有可能的结果。当然,我需要过滤重复项,但我会全部获取。

对于我使用的单个查询:

$result = $con->query($query);
$row = mysqli_fetch_row($result);

但是,我认为多个查询和过滤会比单个查询花费更多时间,因此我正在寻找一种方法来获取单个查询的所有结果,甚至更好,而无需创建字符串的所有可能变体。

最佳答案

正如已经提到的,您只需要运行最后一个查询。为了获得所需的结果顺序(相关性),您需要通过 php 实现该逻辑。

$keyword = 'Your search term';

function getRelevance($value,$keyword){
$value = strtolower($value);
$keyword = strtolower($keyword);

$index = strpos($value, $keyword);
$word_index = strpos($value, ' '.$keyword);

if($index==0) // first word starts with keyword
return 3;
else if($word_index!==false) // any word starts with keyword
return 2;
else if($index!==false) // keyword matches anywhere
return 1;
else
return 0;
}

$keyword = mysqli_real_escape_string($con, $keyword); // prevent SQL injection
$res = $con->query("SELECT * FROM words WHERE `word` LIKE '%$keyword%'");

$words = array();
while($line = $res->fetch_assoc()){
$line['relevance'] = getRelevance($line['word'],$keyword); // assign relevance value based on the "el" query and the elements word
$words[] = $line;
}

function compareRelevance($a,$b){
return $b['relevance'] - $a['relevance'];
}
usort($words,'compareRelevance');

这将从“单词”表中获取所有匹配的条目,并根据搜索词对它们进行排序。

关于php - SQL 使用分隔符获取所有可能的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46829866/

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