gpt4 book ai didi

php - 针对另一列的每个成员搜索一列

转载 作者:行者123 更新时间:2023-11-29 12:07:30 25 4
gpt4 key购买 nike

我想根据另一列的每个成员搜索表中的一列并打印结果。我用 PHP 编写了一个 for 循环,但它太密集了,因为它涉及太多查询。我愿意使用任何支持网络的语言。

$search1=mysql_query(SELECT COLUMN2 FROM TABLE WHERE COLUMN1 LIKE %Search_term%);
for($i=0; i < $search1->num_rows; $i++){
$search2=mysql_query(SELECT COLUMN1 FROM TABLE WHERE COLUMN1 LIKE %Seach_term% AND COLUMN1 LIKE “%$search1[$i]%” LIMIT 3);
echo “$search2[0]”;
echo “$search2[1]”;
echo “$search2[2]”;
echo “<P>”;
$i++;
}

有没有一种方法可以做到这一点,而无需在 for 循环的每个实例中执行 select 语句?如果我可以选择它一次,然后在 SQL 中循环并对其进行排序或分组,我会很高兴。我研究了 GROUPBY 或 SORTBY,但找不到与此接近的示例来将其应用于此。

谢谢。

    edit: example table

id column1 column2
1 walk park dog win for good walk
2 walk go forward do win dog go
3 park job forward daycare a park
4 go with me certified job I with
5 dolphin job park walk care dolphin
6 pack for good park go job for
7 leader forward win dog for leader
8 leader go forward win walk forward
9 tablet forward go walk for tablet
10 Jones job me certfied do go job


results of searching by column2 into column1:

walk go forward do win dog
dolphin job park walk care
leader go forward win walk

walk go forward do win dog
go with me certified job I
pack for good park go job

walk park dog win for good
park job forward daycare a
dolphin job park walk care

go with me certified job I

dolphin job park walk care

walk park dog win for good
leader forward win dog for
tablet forward go walk for

leader forward win dog for
leader go forward win walk

walk go forward do win dog
park job forward daycare a
leader forward win dog for

tablet forward go walk for

park job forward daycare a
go with me certified job I
dolphin job park walk care

--

实际表格为 25,000,000 篇文献引用,第二列是相同的引用,去掉了常见的停用词。我们的梦想是将常见的引用分组在一起。

再次感谢您。

最佳答案

只是一个开始 - 特别是当您的表中有 25,000,000 条记录时...
您的 PHP 似乎从第二列中获取一个单词,并从第一列中仅返回三个随机命中。但以下方法都不会将命中次数限制为 3 次。

任何点击 - 包括,例如,“走公园狗赢好”为“走”,和“领导者前进胜利步行”为“为”:

SELECT
c2.column2
, c1.column1
, c1.id
FROM citation c1
JOIN citation c2
ON INSTR(c1.column1, c2.column2)
ORDER BY c2.column2, c1.column1
;

更具选择性 - 将匹配限制为完整单词:

SELECT
c2.column2
, c1.column1
, c1.id
FROM citation c1
JOIN citation c2
ON FIND_IN_SET(c2.column2, REPLACE(c1.column1, ' ', ','))
ORDER BY c2.column2, c1.column1
;

但是,这样,即使是简单的复数(仅添加“s”形成)也不再被捕获 - 比较添加的第十一条记录,该记录在第二个查询中为“dolphins”返回,但不再为“dolphin”返回在下面的 SQL Fiddle 中。

查看实际效果:SQL Fiddle

这当然需要调整/更详细的要求。

就我个人而言,我不明白“第二列是相同的引文,但删除了常见的停用词” - 因为我在该列中只发现了单个单词。
也许,我会从一张只有(预处理的)引文(引用原文)的表格和一个单词列表(其中包括单词的派生形式)开始。 (或者,引文预处理可以处理这个方面。)当然,简单的 SQL 不会解决名词“walk”和动词“walk”之间的区别。将其包含在输出中,如 SQL Fiddle 所示只会提醒正在努力的人 - 如果这与您的情况完全相关。

根据您的实际(总体)要求,可能值得研究一下 MySQL's full text functionalities .

如果需要调整/进一步的细节,请发表评论。

关于php - 针对另一列的每个成员搜索一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31223782/

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