Поиск нескольких слов

$lider

Бывает
Поиск нескольких слов

Привет всем!
Нужно создать запрос по нескольким словам.
Я получаю
PHP:
$word="hi baby"
с формы, потом преобразовываю в массив
PHP:
$word=explode(" ", $word);
($word[0]="hi" $word[1]="baby")
Далее поиск:
PHP:
mysql_query("SELECT * FROM `users` WHERE `type`='1' AND concat(name, lastname) LIKE '%$word[0]%' OR concat(name, lastname) LIKE '%$word[1]%' ORDER BY `name`",$db);
С этим все гут.
Но вот как зделать шоб была переборка всех слов массива?
Может использовать
PHP:
implode(",", $word)
а потом в запросе
PHP:
in (" .join(',',$word).")
???????
Направте на путь истинный!
 

$lider

Бывает
Ну первый вариант при OR второй будет при AND, это не существенно.
Мне подскажите как массив через запрос проганять.
 

.des.

Поставил пиво кому надо ;-)
Проблемы все равно не понял.
что тебе мешает составлять в цикле свой запрос. Пока не закончатся слова.
for($i=0,$c=sizeof($words);$i<$c;$i++)
// составляем запрос по всем словам.

(Ессно лучше сразу обрубить массив если он больше некого биг Х).
 

$lider

Бывает
что тебе мешает составлять в цикле свой запрос
Мешает то, что я не очень в циклах рублю.
Я хотел попробовать через WHERE `name`, `lastname` in (" .join(',',$word).")
А через for мона подробнее.
 

.des.

Поставил пиво кому надо ;-)
Пример:
Требуется составить запрос следующего вида
SELECT * FROM tn WHERE field LIKE "%word1%" OR field LIKE "%word2%" OR ..... OR field LIKE "%wordN%"
PHP:
$words=array("word1","word2",...,"wordN");
$bigX=100; // ограничение количества слов
$c=sizeof($words);
if($c>0 && $c < $bigX)
{
   $query="SELECT * FROM tn WHERE field LIKE '%".$words[0]."%'";
  for($i=1;$i<$c;$i++) 
  {
      $query.=" OR field LIKE '%".$words[$i]."%'";
  }//for
}//if
echo $query;
Примерно так.
 

$lider

Бывает
Ну не получилось у меня.
Взял, ограничил до 5 слов, потом проганяю через запрос $words[0]$words[1]$words[2]...
 

.des.

Поставил пиво кому надо ;-)
ЧТо не получилось? О чем ты ? Подробнее!
 

$lider

Бывает
ЧТо не получилось? О чем ты ? Подробнее!
Дело все в том, что пример твой я не очень понял, а без понимания, тупо копировать не хочеться.
Ты предлагаешь работать через массив, отнимая в цикле по одному блоку, а я проганяю каждый элемент массива через отдельный цикл.
Так что зделал как получилось, громоздко, зато работает.
 

$lider

Бывает
Вот тут еще вопрос:
я данным примером ищу хоть одно попадание, а как искать ВСЕ слова? (AND??) И как их перебирать??
 

Леша Темный

Guest
PHP:
if ( trim($word) !== '' )
  $where = ' like "%' . str_replace(' ', '%" or like "%', mysql_escape_string(preg_replace('\s+', ' ', trim($word)))) . '%" ';
else $where = '';
-~{}~ 12.04.05 19:51:

забыл бдобавить имя поля перед like :(
 

.des.

Поставил пиво кому надо ;-)
Темный Алексей вы на дату сообщений посмотрите :D человек два года в поиске ;)

диггер это призвание.
 

$lider

Бывает
Ну не знаю, может немного не в тему:
нужно отрезать окончание слов...

жизнь стол столов любовь смерть


PHP:
if(preg_match("/(у|ы|а|о|я|е|и|ь)$/i", $words[$all])) $long = -1;
if(preg_match("/(и|е|о|а|ы|у)[еямюйивх]$/i", $words[$all])) $long = -2;
на выходе:
жизн сто стол любов смерт

Второй случай работает, а все остальное по первому валит...
$long = -1
 

DimbIch

Новичок
.des.
ааа...ээээ а в чем прикол ??? это глюк даты у него или реально ДВА года ????
 

$lider

Бывает
Автор оригинала: DimbIch
.des.
ааа...ээээ а в чем прикол ??? это глюк даты у него или реально ДВА года ????
Да. Два года...
Просто в том проэкте переделал...
А теперь нужен поиск...

p.s. а зачем новые топики создавать :) вот я и вернулся!
I'll be back!
 

Леша Темный

Guest
Ответил в первой попавшейся (сам не помню как попалать) теме на первый попавшийся вопрос. И столько критики.. Не понимаю я вас. Ну и что, что два года. Я на дату вообще не смотрел.

Мне тоже поиск нужен. Точнее он у меня уже есть, но надо доработать.
Хорошая идея вырезать окончания, надо будет ее использовать :)
А никто не знает: как реализовать поиск устоийчивый к ошибкам. Н-р пользователь ошибся в слове в одной букве (это кончно его проблемы, но все-таки)? Или поиск похожих слов. В общем неточный поиск.

Еще воросик: я сделал поиск по словам с ревалентностью (учет частоты втречаемости слова). Но хотелось бы еще учесть расстояние можду словами, т.е. поиск не по отдельным словам, а фразам. Т.е. при запросе "белый снег" предпочтение должно отдаваться той статье в которой встечается "холодный, белый снег" в сравнении например с "белый, холодный снег". В моей реализации оба примера будут иметь одинаковую ревалентность.
 
Сверху