gpt4 book ai didi

PHP/MySQL。是否有mysql函数来检测至少一个mysql行字段中是否存在至少2个特定单词

转载 作者:行者123 更新时间:2023-11-29 03:19:49 25 4
gpt4 key购买 nike

例如,我有 php 数组 $php_arr_to_check = array("green", "red", "blue");

并且有很多像这样的 mysql 行

Id  |  TextToCheckIn 
______________________
1 | green brown blue
2 | black yellow white red
3 | yellow green black red grey white

想要循环 $php_arr_to_check 遍历 TextToCheckIn 列中的每一行并返回 Id,例如,至少 2 个单词来自$php_arr_to_check 存在于 TextToCheckIn 中。

这可能吗?有没有mysql函数存在?

这是 php 的例子(我想要得到的)

$php_arr_to_check = array("green", "red", "blue");
echo '<pre>', print_r($php_arr_to_check, true), '</pre> php_arr_to_check <br/>';

$mysql_rows = array(
array("green", "brown", "blue"),
array("black", "yellow", "white", "red"),
array("yellow", "green", "black", "red", "grey", "white")
);
echo '<pre>', print_r($mysql_rows, true), '</pre> mysql_rows <br/>';

foreach( $mysql_rows as $one_row ){
//echo count(array_intersect($php_arr_to_check, $one_row)). ' count array_intersect __ <br/>';
if( count(array_intersect($php_arr_to_check, $one_row)) > 1 ){
$arr_with_count_matches[] = count(array_intersect($php_arr_to_check, $one_row));
$maches_exist = true;
}
}

echo '<pre>', print_r($arr_with_count_matches, true), '</pre> arr_with_count_matches <br/>';

想要比较 php 数组和 mysql 列得到相同的结果。

关于如何做到这一点的任何想法(没有 LIKE)?可能与 MATCH AGAINST 不知何故?

在我使用下面之前,但好像是误报....

SELECT 
Id FROM table
WHERE MATCH (TextToCheckIn) AGAINST (?) LIMIT 1

会尝试

SELECT 
Id FROM table
WHERE MATCH (SUBSTRING_INDEX(TextToCheckIn, ' ', 3)) AGAINST (?) LIMIT 1

据了解,我会将 TextToCheckIn 中的前 3 个单词与 php 数组进行比较。但不明白我会得到什么。在这里阅读http://www3.physnet.uni-hamburg.de/physnet/mysql/manual_Fulltext_Search.html

For every row in a table it returns relevance - a similarity measure between the text in that row (in the columns that are part of the collection) and the query.

似乎正是需要的...需要检查

最佳答案

我想你想使用 Boolean Full-Text Search

如果不使用运算符 + -green red blue 进行匹配,则返回所有行,其中一条记录至少包含一个单词: green or red or blue.

在 bool 模式下,如果没有运算符,每个匹配的单词都会得分 1。因此,如果有一条记录与三个词中的两个匹配,它将得分为 2

要获取至少有 2 个分数的行:

SELECT *,
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE) `score`
FROM `my_tab` WHERE
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE)
HAVING `score` >= 2
ORDER BY `score` DESC

Natural Language mode评分工作完全不同。认为它主要基于BM25 .


在大型数据集上, bool 全文搜索(使用 fulltext index )通常优于 REGEXPLIKE文本。仅使用 like/regexp 来从初始匹配,例如 REGEXP '^word'LIKE 'word%' - 如果可以使用索引。

关于PHP/MySQL。是否有mysql函数来检测至少一个mysql行字段中是否存在至少2个特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47195131/

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