gpt4 book ai didi

mysql - 使用全文查询在 mysql 中进行子查询

转载 作者:行者123 更新时间:2023-11-29 05:38:37 25 4
gpt4 key购买 nike

我正在尝试查询数据库。我已经有一个文件,其中包含整个数据库中的一些主键。现在我想过滤这些主键并只获取那些也同意“其他条件”的主键。我的主键与数据库中的摘要相关联。摘要是全文索引的。现在我想考虑使用给定主键的摘要,在这些摘要中寻找我的“其他条件(术语)”,如果它存在我想拉出它们的主键(这将与文件中的主键相同)。我的“其他条件”是另一个包含术语列表的文件。我想获得在给定主键中包含这些术语的摘要。

我的全文搜索是这样的:

while(<FILE1>){
$PK = $_;
foreach $foo(@foo){
my $sth = $dbh->prepare(qq{
SELECT value
FROM value_table
WHERE MATCH (column_text_indexed) AGAINST (? IN BOOLEAN MODE)
}) AND primary_key=$PK;

$sth->execute(qq{+"$foo"});
}
}

其中 $PK 来 self 已有的主键列表。$foo 将是我要查找的条款(条件 2)的列表。

通常,我可以运行这个查询 $PK 的数量乘以 $foo 的数量。但是我通过子查询学到了一些关于优化的东西,我不会在我不会运行查询的地方#$PK times#$foo。这将摆脱内部循环,但仍将形成每个 $PK 与文件 2 中每个项的组合,即 @foo。如下所示:

while(<FILE1>){
$PK = $_;
my $sth = $dbh->prepare(qq{
SELECT value
FROM value_table
WHERE MATCH (column_text_indexed) AGAINST (**SUB QUERYING HERE**)
}) AND primary_key=$PK;

$sth->execute(qq{+"$foo"});

}

就是不知道怎么办。我的语法可能有误。我想知道如何为全文搜索和子查询编写代码。我希望这比直接查询组合更有效。非常感谢任何帮助。

最佳答案

我认为您不需要使用子查询。但是您仍然可以通过组合匹配字符串来摆脱内部循环。

my $against = join ' ', map {qq/"$_"/} @foo;
while (my $PK = <FILE1>) {
chomp $PK;

my $sth = $dbh->prepare(qq{
SELECT value
FROM value_table
WHERE primary_key = ?
# no '+' so it can match against at least one of the words in the list
AND MATCH (column_text_indexed) AGAINST (? IN BOOLEAN MODE)
});
$sth->execute($PK, $against);

更新

我修改了它并从循环中完全删除了查询。

my @primary_keys;
while (my $PK = <FILE1>) {
chomp $PK;
push @primary_keys, $PK;
}

my $PK_list = join ',', map {qq/'$_'/} @primary_keys;
my $against = join ' ', map {qq/"$_"/} @foo;

my $sth = $dbh->prepare(qq{
SELECT value
FROM value_table
# placeholders can only represent single scalar values so $PK_list can't be bound
WHERE primary_key IN ($PK_list)
# no '+' so it can match against at least one of the words in the list
AND MATCH (column_text_indexed) AGAINST (? IN BOOLEAN MODE)
});
$sth->execute($against);

# continue with fetching the rows
...;

关于mysql - 使用全文查询在 mysql 中进行子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8600324/

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