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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Опять про Like

Сообщения:  [1-5] 

 
 автор: babilonian   (01.06.2006 в 16:10)   письмо автору
 
   для: Trianon   (01.06.2006 в 13:42)
 

Ну я в общем-то поля нужные потом добавил, и то же самое получилось))). Просто с синтаксисом проблемы были.

   
 
 автор: Trianon   (01.06.2006 в 13:42)   письмо автору
 
   для: cheops   (01.06.2006 в 11:43)
 

Я очень долго пытался понять, как эта конструкция без имен полей и операций Like будет работать. В конце концов решил, что никак.

Вот эта конструкция более жизнеспособна:
<?
$list
explode(" "$serch_request); 
function 
map($val) { return "text LIKE '%".mysql_escape_string($val)."%'"; }

$sql "SELECT * FROM table WHERE " implode ("\nAND ",
               
array_map('map'$list)) . " AND hide=1 ORDER BY id DESC";
//echo nl2br($sql);
mysql_query($sql);
?>

   
 
 автор: babilonian   (01.06.2006 в 12:01)   письмо автору
 
   для: cheops   (01.06.2006 в 11:43)
 

Понятно. Спасибо. Вот, кстати идея для книжек. Как строить синтаксис повторяющихся запросов. По крайней мере в PHP5 на примерах такого нет.

   
 
 автор: cheops   (01.06.2006 в 11:43)   письмо автору
 
   для: babilonian   (01.06.2006 в 11:34)
 

Лучше вместо такой схемы (которая вам даст столько же ключевых слов like сколько слов в запросе)
<?php
  $sql_arr
[]="like '%$request_word%' and ";
  
$sql=@implode(" ",$sql_arr); 
?>

писать так
<?php
  $sql_arr
[]=" '%$request_word%' ";
  
$sql="SELECT * FROM tbl WHERE ".implode(" AND ",$sql_arr); 
?>

   
 
 автор: babilonian   (01.06.2006 в 11:34)   письмо автору
 
 

Пытаюсь поиск на его основе построить. Если искать одно слово, все нормально. Если два и больше, то говорит, что не соединения с базой. Что мог упустить?
$serch_request – Здесь лежит поисковый запрос


<?
$request_array
=explode(" "$serch_request); // Раскладываем по словам
  
foreach($request_array as $request_word)    // Разбираем массив
    
{
    if(!empty(
$request_word))               // Если слово есть
      
{
      
$sql_arr[]="like '%$request_word%' and ";   // Составляем массив запросов
      
}
    }
  
$sql=@implode(" ",$sql_arr);            // Пакуем запросы в кучу
  
$find_arrcomp=mysql_query("select * from table where text $sql hide='1' order by id desc")or die ("Нет соединения с базой");
?>


hide='1' - это неудаленное и не скрытое поле по которому можно искать.
ну id это номер строки
а вот по text как раз и ищем.

И, собственно передаем запрос. Если больше двух слов, лезут ошибки - "Нет соединения с базой". В чем бяда?

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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