Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поиск REGEXP или LIKE по нескольким словам. нидхелп
 
 автор: virtus   (12.04.2006 в 11:39)   письмо автору
 
 

Вот запрос
$query="select * from catalog where name REGEXP '$search_texto' or description REGEXP '$search_texto' or made REGEXP '$search_texto' ";

есть позиция к примеру в столбике description "Книжка по PHP для сумасшеднших"
если делаю запрос "книж" -находит как нужно а если делаю запрос "книж сум" - не ищет нифига. Как сформировать запрос таким способом, что бы работало и по первому и по второму варианту

? Спасибо!

   
 
 автор: Trianon   (12.04.2006 в 12:16)   письмо автору
 
   для: virtus   (12.04.2006 в 11:39)
 

книж сум - это не регулярное выражение. Точнее, оно, конечно, регулярное, но ничего кроме "книж сум" искать не обучено.
Заставлять учить пользователей язык регулярных выражений - редкостный садизм.

   
 
 автор: virtus   (12.04.2006 в 12:33)   письмо автору
 
   для: Trianon   (12.04.2006 в 12:16)
 

я знаю, что пользователей не нужно ничему учить, мне нужно просто что бы мой запрос сам обрабатывал как нужно. Знаешь как помочь, нет?

   
 
 автор: Trianon   (12.04.2006 в 12:42)   письмо автору
 
   для: virtus   (12.04.2006 в 12:33)
 

Поскольку Вы довольно туманно описали "как именно нужно", то конечно, не знаю, а могу лишь догадываться. Имеет смысл применить полнотекстовый поиск.

   
 
 автор: virtus   (12.04.2006 в 13:07)   письмо автору
 
   для: Trianon   (12.04.2006 в 12:42)
 

в теме ясно указанно каким способом нужно делать поиск!

мне нужно, что бы если пользователь задал поиск по словосочетанию "вод стол" нашло "водку столичную"

ясно, нет?

   
 
 автор: Loki   (12.04.2006 в 13:34)   письмо автору
 
   для: virtus   (12.04.2006 в 13:07)
 

разбираете фразу на отдельные слова и ищите каждое слово как LIKE 'слово%'

   
 
 автор: virtus   (12.04.2006 в 13:42)   письмо автору
 
   для: Loki   (12.04.2006 в 13:34)
 

спасибо Loki
Тогда выйдет, что найдет везде и по одному слову - ведь так! это не есть верный путь...
а можно пример как разбивать на слова и искать?

   
 
 автор: cheops   (12.04.2006 в 13:55)   письмо автору
 
   для: virtus   (12.04.2006 в 13:42)
 

Для этого можно воспользоваться либо функцией explode()
<?php
  $str 
"Книжка по PHP для амбулаторных";
  
$arr explode(" ",$str);
  echo 
"<pre>";
  
print_r($arr);
  echo 
"</pre>";
?>

либо при помощи регулярных выражений и функции preg_split()
<?php
  $str 
"Книжка по PHP для выздаравливающих";
  
$arr preg_split("|[\s]+|",$str);
  echo 
"<pre>";
  
print_r($arr);
  echo 
"</pre>";
?>

   
 
 автор: Loki   (12.04.2006 в 14:56)   письмо автору
 
   для: virtus   (12.04.2006 в 13:42)
 

<?php 
  $str 
"Книжка по PHP для амбулаторных"
  
$arr explode(" ",$str); 
  
$quer="pole LIKE '".implode("%' AND pole LIKE '"$arr)."%'";
$sql="SELECT * FROM table WHERE $quer";

[поправлено модератором]

   
 
 автор: virtus   (12.04.2006 в 17:05)   письмо автору
 
   для: Loki   (12.04.2006 в 14:56)
 

Спасибо.
Но все равно не пойму... в том, что Локи привел примере - по одной ячейке только ищет? нужно мне по трем...
а вот то что Чупс привел (СПАСИБО) запрос разбивается по словам в массив... так как мне мой запросище вставить в данный массив ?

   
 
 автор: Trianon   (12.04.2006 в 17:18)   письмо автору
 
   для: virtus   (12.04.2006 в 17:05)
 


<?php 
  $str 
"Книжка по PHP для амбулаторных"
  
$arr explode(" ",$str); 
  
$quer="pole LIKE '".implode("%' AND pole LIKE '"$arr)."%'"
$sql="SELECT *, CONCAT(name, description ,  made) as pole FROM table WHERE $quer"
 
?>

Впрочем, алиас во WHERE может и не пойти...

   
 
 автор: Loki   (12.04.2006 в 17:52)   письмо автору
 
   для: Trianon   (12.04.2006 в 17:18)
 

Скорее всего. Обработка, если не ошибаюсь, начинается все-таки в where...
Подождем что Чупс скажет:))

   
 
 автор: cheops   (13.04.2006 в 00:15)   письмо автору
 
   для: Loki   (12.04.2006 в 17:52)
 

Можно поступить следующим образом
<?php 
  $str 
"Книжка по PHP для амбулаторных"
  
$arr explode(" ",$str);
  foreach(
$arr as $word$quer[] = "(name LIKE '%$word%' OR description LIKE '%$word%' OR made LIKE '%$word%')"
  
$sql "SELECT * FROM table WHERE ".implode(" AND "$quer); 
  echo 
$sql;
?>

   
 
 автор: virtus   (13.04.2006 в 11:32)   письмо автору
 
   для: cheops   (13.04.2006 в 00:15)
 

Супер. Спасибо, чуток подправил только ;)
Спасибо, всем

   
 
 автор: cheops   (12.04.2006 в 13:51)   письмо автору
 
   для: virtus   (12.04.2006 в 11:39)
 

-

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования