URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4513
[ Назад ]

Исходное сообщение
"select на perл"

Отправлено pheonix , 28-Июл-05 11:20 
надо сделать выборку такого рода, есть поле с данными и есть переменная со одним словом или несколькими как сделать запрос так чтобы если слова в переменной встречались то запись выбиралась если нет то ессно нет, такон возможно или нет? просто мне надо не целиком поле сравнивать а найти совпадения

Содержание

Сообщения в этом обсуждении
"select на perл"
Отправлено ihor , 28-Июл-05 12:30 
use strict;
my($tblname, $fldname, @words, $sql_str, @req_strings, $w);

$tblname = 'table';
$fldname = 'field';

@words = qw(word1 word2 word3 word3 word4);
$sql_str = "select * from $tblname where ";
@req_strings = ();

for $w (@words) {
    push(@req_strings, "$fldname like '%$w%'");
} # for

$sql_str .= join(' or ', @req_strings) . ';';
print $sql_str, "\n";


"select на perл"
Отправлено pheonix , 28-Июл-05 13:03 
>use strict;
>my($tblname, $fldname, @words, $sql_str, @req_strings, $w);
>
>$tblname = 'table';
>$fldname = 'field';
>
>@words = qw(word1 word2 word3 word3 word4);
>$sql_str = "select * from $tblname where ";
>@req_strings = ();
>
>for $w (@words) {
> push(@req_strings, "$fldname like '%$w%'");
>} # for
>
>$sql_str .= join(' or ', @req_strings) . ';';
>print $sql_str, "\n";


это всё канечна прекрасно написано мне нрависять тока я не понял чё тут написано у меня короче строиться запрос так

$str='find';
$rq=$dbh->Query("select * from table where (data='$str')");

дак вот если поле дата целиком соответсвует переменной $str то у меня эта запись выбереться, потовряю вопрос ещё раз как мне запросом через перл выбрать все записи которые совпадают не всем контентом поля, а тока какому нить слову лежащему в переменно $str

наприме
есть такие записи в поле DATA
1. "find srt sirb by name opennetdjs;lkdssad ajsdl"
2. "find srt sirb by name openсвnetdjs;lkdssad ajsdl"
3. "find s-в8а tdjs;lkdssad ajsdl"
4. "щзуopennetттуеfind s-в8а tdjs;lkdssad ajsdl"
и так балее

в переменной лежит вот что $str='opennet';
каким запросом мне сверить содержание переменной и не полной совпадение поля DATA а частиино
по запросу должны выбраться 1 и 4 записи, как такой запрос сформировать?
если кто не понял то могу повтариться ещё раз


"select на perл"
Отправлено ihor , 28-Июл-05 13:25 
А Вы запустите, то что я нарисовал и посмотрите на результат

"select на perл"
Отправлено Simps , 28-Июл-05 13:34 
>>use strict;
>>my($tblname, $fldname, @words, $sql_str, @req_strings, $w);
>>
>>$tblname = 'table';
>>$fldname = 'field';
>>
>>@words = qw(word1 word2 word3 word3 word4);
>>$sql_str = "select * from $tblname where ";
>>@req_strings = ();
>>
>>for $w (@words) {
>> push(@req_strings, "$fldname like '%$w%'");
>>} # for
>>
>>$sql_str .= join(' or ', @req_strings) . ';';
>>print $sql_str, "\n";
>
>
>это всё канечна прекрасно написано мне нрависять тока я не понял чё
>тут написано у меня короче строиться запрос так
>
>$str='find';
>$rq=$dbh->Query("select * from table where (data='$str')");
>
>дак вот если поле дата целиком соответсвует переменной $str то у меня
>эта запись выбереться, потовряю вопрос ещё раз как мне запросом через
>перл выбрать все записи которые совпадают не всем контентом поля, а
>тока какому нить слову лежащему в переменно $str
>
>наприме
>есть такие записи в поле DATA
>1. "find srt sirb by name opennetdjs;lkdssad ajsdl"
>2. "find srt sirb by name openсвnetdjs;lkdssad ajsdl"
>3. "find s-в8а tdjs;lkdssad ajsdl"
>4. "щзуopennetттуеfind s-в8а tdjs;lkdssad ajsdl"
>и так балее
>
>в переменной лежит вот что $str='opennet';
>каким запросом мне сверить содержание переменной и не полной совпадение поля DATA
>а частиино
>по запросу должны выбраться 1 и 4 записи, как такой запрос сформировать?
>
>если кто не понял то могу повтариться ещё раз


А если бы пошел бы на dev.mysql.com и почитал про синктаксис SELECT то уверяю тебя на 100%, ты бы сюда не писал


"select на perл"
Отправлено pheonix , 28-Июл-05 14:54 
вобщем сходил я куда над там маны тока для 4 версии а для третей нету, вот я чего не понимаю на форуме это понапишут тонны текста, нет чтобы просто пару строк кода кинуть или хотя не прошу писать, а как просто запрос сделать такой я сам его преобразую

"select на perл"
Отправлено ihor , 28-Июл-05 16:23 
select * from table where field like '%word1%' or field like '%word2%' or field like '%word3%' or field like '%word3%' or field like '%word4%';

-- это то, что генерировал мой скрипт по набору слов, имени таблицы и поля


"select на perл"
Отправлено pheonix , 29-Июл-05 08:24 
>select * from table where field like '%word1%' or field like '%word2%'
>or field like '%word3%' or field like '%word3%' or field like
>'%word4%';
>
>-- это то, что генерировал мой скрипт по набору слов, имени таблицы
>и поля


аха вобщем работает тока как-то странно некоторые записи выцыпляет в которых нет этих слов:) ну всё равно спасибо


"select на perл"
Отправлено pheonix , 29-Июл-05 08:40 
а нет всё ок тока он не понимает что [ё и е] [и и й] это разное:)