Я пытаюсь запросить базу данных.У меня уже есть файл, который включает в себя некоторые первичные ключи из всей этой базы данных.Теперь я хочу отфильтровать эти первичные ключи и получить только те первичные ключи, которые также соответствуют «другому условию».Мои первичные ключи связаны с рефератами в базе данных.Тезисы полнотекстовой индексации.Теперь я хочу рассмотреть рефераты, используя заданные первичные ключи, найти мои «другие условия (термины)» в этих рефератах и, если они присутствуют, я хочу извлечь их первичные ключи (которые будут такими же из файла).Мое "другое условие" - это другой файл со списком терминов.Я хочу получить рефераты, которые содержат эти термины в заданных первичных ключах.
Мой полнотекстовый поиск выглядит примерно так:
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 идет из списка первичных ключей, которые у меня уже есть.$ 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"});
}
Просто я не знаю, как это сделать.Я могу ошибаться с синтаксисом.Я хочу знать, как написать код для полнотекстового поиска, а также подзапрос.Я надеюсь, что это будет эффективнее, чем прямой запрос комбинаций.Любая помощь с благодарностью.