Я снова застрял.
У меня есть строка поиска и присваивается ее переменной:
my $search = 'foo bar blue widget'
$search =~ s/[\n\r]+|^\s+|\s+$//g; #remove leading and trailing spaces n stuff
Я использовал
SELECT FROM `sometable` WHERE `coltosearch` LIKE '%$search%'
Но, будет соответствовать только "foo bar blue widget" ИЛИ "foo".
Я хочу совместить "foo bars" или "foobar" тоже.
Итак, я думаю, мне нужно будет сделать:
my $search = 'foo bar blue widget';
$search =~ s/[\n\r]+|^\s+|\s+$//g; #remove leading and trailing spaces n stuff
my $search1 = $search;
$search1 =~ s/^\s+|\s+$|\s*//g; #remove all spaces
SELECT FROM `sometable` WHERE `coltosearch` LIKE '%$search%' OR LIKE '%$search1%'
Ну, это может быть хорошо для "foo bar blue widget" и "foobarbluewidget". (если он сработал)
Итак, я предполагаю, что мне придется перебирать $search и назначать переменные каждому слову.
Но я никогда не знаю, сколько слов у меня будет в $search.
Итак, я застрял. Могу ли я сделать что-то вроде:
my $search = 'foo bar blue widget'; #in from search form. Actually a $var
$search1 =~ s/^\s+|\s+$|\s*//g; #remove all spaces
$search1 = "%$search1%"; # Makes %foobarbluewidget%
## Now make individual words somehow ##
my @searcharry;
my $cnt='0';
my $searchword;
my @searchsplit = $search;
while $searchword (@searchsplit){
push (@searcharry,$searchword[$cnt]);
$cnt++;
}
Но как мне получить @searcharry в:
$search =~ s/\s/%/gi;
$search =~ s/%%/%/gi; #I think makes %foo%bar%blue%widget%
Итак, я могу:
SELECT FROM `sometable` WHERE `coltosearch` LIKE '$search' OR LIKE '$search1'
Я, вероятно, ушел с базы. Это очень сложно для меня. Я просто хочу совместить любые слова в строке поиска или соответствовать, если все слова выполняются вместе.
Извини за то, что ты такой нуб. Моя грубая попытка, я считаю, является оскорблением для Perl и настоящих кодеров.
Спасибо за любую помощь.
Если у вас есть $string = "foo bar blue widget"
, вы бы сделали что-то вроде:
my @values = split '\s+', $string;
my $where = "WHERE $col LIKE ?";
$where .= " OR LIKE ?" x $#values;
Это создаст предложение where WHERE column LIKE ? OR LIKE ? OR LIKE ? OR LIKE ?
для вашей строки "foo bar blue widget"
.
Затем вы используете заполнители DBI и связываете значения, поэтому вам не нужно беспокоиться о "Атаки SQL-инъекций" на ваш код.
SELECT * FROM whatever
и т. Д.) И затем объединить предложение where из приведенного выше фрагмента кода. Затем вы подготовите и выполните инструкцию, как описано в первой ссылке в моем ответе.
tab
ГДЕcol
RLIKE 'foo | bar | blue | widget';col LIKE '%$term1%' OR col LIKE '%$term2%' OR ... col LIKE '%$term4%'
?