Forum Rules Здесь помогают писать скрипты

Готовые скрипты искать в этом форуме
Помощь в настройке и установке готовых скриптов в этом форуме

 Координатор: Endeveit
 
Ответить · Новая тема · Новый опрос

 :: Поиск...
Nik
Дата Вторник, 18 Ноября 2003, 15:25  | 


ВОвебовец
*
Группа: Members
Сообщений: 954



Статус: Offline

Хотел сделать поиск по базе.
Столкнулся с такой проблемой - мне надо сделать такой поиск, чтобы:
1. Игнорировал регистр строки;
2. Мог искать по словам, разделенные пробелом.
Например, строка $s = "word1 word2 word3";
Количество слов не известно, но надо, что SELECT выдавал все записи, которые удовлетворяют хоть одному из слов...
Была идею разбить строку на массив, но это на мой взгляд не удобно - много запросов получится тогда.
Какие будут варианты? :)
^
asam
Дата Вторник, 18 Ноября 2003, 15:47  | 


ВОвлеченный участник
***
Группа: Members
Сообщений: 74



Статус: Offline

Если у тебя поля, по которым надо делать поиск, типа 'TEXT' ,
то всё просто - объявляешь поле как 'FULLTEXT'
1. В типе 'TEXT' при поиске регистр не учитывается
2. запрос :
SQL
SELECT id,txt FROM table WHERE MATCH(txt) AGAINST ('$s')

возвратит все строки , соответствующие твоему запросу - при этом пробелы между словами будут рассматриватся как разделители.
запрос
SQL
SELECT id,txt,MATCH(txt) AGAINST ('$s')
as rel FROM table WHERE MATCH(txt) AGAINST ('$s') ORDER BY rel DESC

сделает тоже самое , но строки будут отсортированы по реавалантности


--------------------
^
Nik
Дата Вторник, 18 Ноября 2003, 16:00  | 


ВОвебовец
*
Группа: Members
Сообщений: 954



Статус: Offline

asam, сенкс :)
Пойду проверять...
^
Nik
Дата Среда, 03 Декабря 2003, 20:18  | 


ВОвебовец
*
Группа: Members
Сообщений: 954



Статус: Offline

Отлично, код работает!
Но, можно ли немного изменить параметры поиска?
Чтобы искать к примеру по части слова.
Как это реализовать? :unsure:
^
asam
Дата Четверг, 04 Декабря 2003, 9:10  | 


ВОвлеченный участник
***
Группа: Members
Сообщений: 74



Статус: Offline

Если я правильно тебя понял , тогда есть - IN BOOLEAN MODE
SQL
SELECT id,txt,MATCH(txt) AGAINST ('$s')
as rel FROM table WHERE MATCH(txt) AGAINST ('$s' IN BOOLEAN MODE ) ORDER BY rel DESC

где '$s' помимо собственно строки поиска может содержать
QUOTE

+
Предшествующий слову знак ``плюс'' показывает, что это слово должно присутствовать в каждой возвращенной строке.
-
Предшествующий слову знак ``минус'' означает, что это слово не должно присутствовать в какой-либо возвращенной строке.
По умолчанию (если ни плюс, ни минус не указаны) данное слово является не обязательным, но содержащие его строки будут оцениваться более высоко. Это имитирует поведение команды MATCH() ... AGAINST() без модификатора IN BOOLEAN MODE.
< >
Эти два оператора используются для того, чтобы изменить вклад слова в величину релевантности, которое приписывается строке. Оператор < уменьшает этот вклад, а оператор > - увеличивает его. См. пример ниже.
( )
Круглые скобки группируют слова в подвыражения.
~
Предшествующий слову знак ``тильда'' воздействует как оператор отрицания, обуславливая негативный вклад данного слова в релевантность строки. Им отмечают нежелательные слова. Строка, содержащая такое слово, будет оценена ниже других, но не будет исключена совершенно, как в случае оператора - ``минус''.
*
Звездочка является оператором усечения. В отличие от остальных операторов, она должна добавляться в конце слова, а не в начале.
"
Фраза, заключенная в двойные кавычки, соответствует только строкам, содержащим эту фразу, написанную буквально.


Всё это можно прочитать здесь


--------------------
^
Nik
Дата Четверг, 04 Декабря 2003, 18:13  | 


ВОвебовец
*
Группа: Members
Сообщений: 954



Статус: Offline

Сделал такой запрос, но он выдает ошибку синтаксиса...
SQL
SELECT id FROM table WHERE MATCH(txt) AGAINST ('test*' IN BOOLEAN MODE)

Где ошибка может быть?
^
 Быстрый Ответ
Введите ваше имя
Расширенный режим
Нормальный режим
Открытых тэгов:     Закрыть все тэги
Смайлики
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie         
Показать всё

Помощь по кодам форума ] [ Проверить длину сообщения ] [ Транслит из Латиницы в Кириллицу ]
 Включить подпись?
 Включить смайлики?
 Включить уведомление на e-mail при ответах?
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SQL | Следующая тема »

Опции темы Ответить · Новая тема · Новый опрос

 



Rating@Mail.ru LiveInternet