Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск по текстовой константе, [Организация поиска в базе] 
V
    Опции темы
olegop
Дата 21.12.2007, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 2.10.2007
Где: ПМР, Тирасполь

Репутация: нет
Всего: нет



Стоит задача:
Есть в базе (MySQL) в одном из полей таблицы текстовые фрагменты, каким образом можно организовать поиск по заданной текстовой строке используя MySQL запросы.
к примеру 
if ($_POST['search']) {
 $search = 'str';
// вот отсюда как оперировать этой переменной
...
PM MAIL   Вверх
MoLeX
Дата 21.12.2007, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



не в той теме.

вы случйно не LIKE имеете ввиду?!
тут искать не пробовали?!

Это сообщение отредактировал(а) MoLeX - 21.12.2007, 09:44


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
olegop
Дата 21.12.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 2.10.2007
Где: ПМР, Тирасполь

Репутация: нет
Всего: нет



Плохо сформулировал вопрос, именно LIKE или REGEXP только у меня возникает вопрос, благо если в поиск зададут одно слово, а если там целую строку введут? это прийдется с помощь строковых функций пхп ее разбивать и прогонять поиском по базе? или как это можно организовать?

Добавлено через 51 секунду
Сейчас там посмотрю)
PM MAIL   Вверх
Feldmarschall
Дата 21.12.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



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

подсказка: во WHERE можно использовать несколько условий
PM   Вверх
olegop
Дата 21.12.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 2.10.2007
Где: ПМР, Тирасполь

Репутация: нет
Всего: нет



Код

$search = "da; budet svet. skazal monter,";
$case = 'not_execly';
switch ($case) {
    case 'execly':

        break;
    case 'not_execly': 
        $tok = strtok($search, " \n\t,-.:;?!()[]");
        $temp='';
        while ($tok) {
            $temp .= '"%'.$tok.'%" OR ';    
            $tok = strtok(" \n\t,-.:;?!()[]");
        }
        $lenght = strlen($temp);
        $query = substr($temp, 0, $lenght - 4);
        $mysql_query = 'SELECT * FROM video WHERE description LIKE '.$query;
        echo $mysql_query;
        break;
}

ну вот что примерно накидал.
у меня получается на запрос с определенным количество OR после LIKE 
Код

SELECT * FROM video.video WHERE imgpatch LIKE "%da%" OR "%e%" OR "%svet%" OR "%skazal%" OR "%monter%";

то есть первое значение обрабрабатывает, в данном случае "%da%" на остальные ругается следующим образом 
Truncated incorrect INTEGER value: '%e%'
Truncated incorrect INTEGER value: '%svet%'
... 
но я это проверял непосредственно в MySQL administrator. Может я не правильно формирую запрос? 

Это сообщение отредактировал(а) olegop - 21.12.2007, 13:19
PM MAIL   Вверх
Feldmarschall
Дата 21.12.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



На первый взгляд, запрос выглядит нормально.
что такое MySQL administrator и на что он ругается - я не в курсе
PM   Вверх
SelenIT
Дата 21.12.2007, 13:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



Цитата(olegop @  21.12.2007,  13:18 Найти цитируемый пост)
....WHERE imgpatch LIKE "%da%" OR "%e%" OR "%svet%" OR "%skazal%" OR "%monter%"

Все-таки, до такой степени телепатия в SQL еще не развита. Вот так обязано сработать:
Цитата

....WHERE imgpatch LIKE "%da%" OR imgpatch LIKE "%e%" OR imgpatch LIKE "%svet%" OR imgpatch LIKE "%skazal%" OR imgpatch LIKE "%monter%"



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
olegop
Дата 21.12.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 2.10.2007
Где: ПМР, Тирасполь

Репутация: нет
Всего: нет



SelenIT, Спасибо!

Код

$search = htmlspecialchars(trim($_POST['search']), ENT_QUOTES);
$case = $_POST['case'];
switch ($case) {
    case 'execly':
        $mysql_query = 'SELECT * FROM video WHERE description LIKE'.' "%'.$search.'%"';
        break;
    case 'not_execly': 
        $tok = strtok($search, " \n\t,-.:;?!()[]");
        $temp='';
        while ($tok) {
            $temp .= 'description LIKE "%'.$tok.'%" OR ';    
            $tok = strtok(" \n\t,-.:;?!()[]");
        }
        $lenght = strlen($temp);
        $query = substr($temp, 0, $lenght - 4);
        $mysql_query = 'SELECT * FROM video WHERE '.$query;
        echo $mysql_query;
        break;
}


мож кому пригодиться

Это сообщение отредактировал(а) olegop - 21.12.2007, 14:50
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.