Немного порыл интернет и вычислил что искать по базе можно с помощью LIKE '%текст%'. Но у меня возникли некоторые проблемы. Не могу понять как искать по нескольким словам. То есть если первое слово не найдено то искать по второму и так далее. Думаю можно сделать через OR, но на мой это будет слегка неудобно... Можете дать кокой нибудь простой пример реализации?
Спустя 10 минут, 54 секунды (26.05.2010 - 16:41) waldicom написал(а):
Можно использовать полнотекстовый поиск, но там есть тсвои ограничение.
Например движок должен быть MyISAM.
Тут на английском, сравнение на русском
Например движок должен быть MyISAM.
Тут на английском, сравнение на русском
Спустя 2 часа, 21 минута, 39 секунд (26.05.2010 - 19:03) Unlikely написал(а):
Не совсем понимаю что значит "Например движок должен быть MyISAM". И по всй видимости у меня не работает такой вариант.
При такой заявке
select * from `posts` match(title) against('blabla')
получаю ошибку.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match(title) against('blabla') LIMIT 0, 30' at line 1
P.S. У вас с аватаркой какие то проблемы кажется. Убейте её, страницы долго грузятся:)
При такой заявке
select * from `posts` match(title) against('blabla')
получаю ошибку.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match(title) against('blabla') LIMIT 0, 30' at line 1
P.S. У вас с аватаркой какие то проблемы кажется. Убейте её, страницы долго грузятся:)
Спустя 34 минуты, 21 секунда (26.05.2010 - 19:37) vagrand написал(а):
Используйте sphinx http://www.sphinxsearch.com/
Спустя 1 час, 3 минуты, 10 секунд (26.05.2010 - 20:40) Unlikely написал(а):
vagrand
Не хочется разбираться в чужом коде...
Не хочется разбираться в чужом коде...

Спустя 15 минут, 50 секунд (26.05.2010 - 20:56) Gabriel написал(а):
Unlikely
для полнотекстового поиска движек таблицы должен быть MyIsam, поиск работает только по полям типа text, varchar с поставленным full text индексом на них.
а чем не подходит вариант типа:
1. поискали одно слово.
2. не нашли совпадений.
3. запустили тот-же запрос но уже с другим ключевым словом.
для полнотекстового поиска движек таблицы должен быть MyIsam, поиск работает только по полям типа text, varchar с поставленным full text индексом на них.
а чем не подходит вариант типа:
1. поискали одно слово.
2. не нашли совпадений.
3. запустили тот-же запрос но уже с другим ключевым словом.
Спустя 16 минут, 3 секунды (26.05.2010 - 21:12) Unlikely написал(а):
Цитата (Gabriel @ 26.05.2010 - 17:56) |
1. поискали одно слово. 2. не нашли совпадений. 3. запустили тот-же запрос но уже с другим ключевым словом. |
Устраивает полностью

Вот я и хочу от чего то оттолкнуться. И я так понимаю, придётся в цикле запросы тогда отправлять? Что то не могу сообразить
Спустя 24 минуты, 23 секунды (26.05.2010 - 21:37) vagrand написал(а):
Цитата |
Не хочется разбираться в чужом коде... smile.gif |
А придется, если хотите чтобы усе быстро работало.
Спустя 55 минут, 27 секунд (26.05.2010 - 22:32) FatCat написал(а):
Цитата (Gabriel @ 26.05.2010 - 21:56) |
чем не подходит вариант типа: 1. поискали одно слово. 2. не нашли совпадений. 3. запустили тот-же запрос но уже с другим ключевым словом. |
Он будет намного медленней варианта:
Цитата (Unlikely @ 26.05.2010 - 17:30) |
можно сделать через OR |
Наиболее ресурсозатратная операция здесь - перебор строк таблицы. Лучше много поисков внутри одного перебора, чем много переборов внутри каждого поиска.
Спустя 5 часов, 42 минуты, 2 секунды (27.05.2010 - 04:14) Gabriel написал(а):
FatCat
Цитата |
То есть если первое слово не найдено то искать по второму и так далее |
ну это логично что будет медленнее. но как забабацать такой поиск через OR никак догадатся немогу.
Спустя 3 часа, 30 минут, 25 секунд (27.05.2010 - 07:45) Basili4 написал(а):
Если есть список Gabriel ключевых слов то нетрудно
WHERE text like '%key1%' or like '%key2%' or like '%key3%' ..........
Спустя 1 час, 25 минут, 23 секунды (27.05.2010 - 09:10) vagrand написал(а):
Ну што Вы все человеку советуете. Вы на ваш запрос через explain посмотрите и увидите какой он красивый. Выполнятся он будет уйму времени.
Уж если на то пошло пущай создает отдельную таблицу в которой для каждого слова будет отдельная строка, связывает с текущей и ищет уже по ней. Так будет гораздо быстрее.
Уж если на то пошло пущай создает отдельную таблицу в которой для каждого слова будет отдельная строка, связывает с текущей и ищет уже по ней. Так будет гораздо быстрее.
Спустя 4 дня, 9 часов, 37 минут, 37 секунд (31.05.2010 - 18:48) Gabriel написал(а):
Basili4
Цитата |
То есть если первое слово не найдено то искать по второму и так далее |
значит ввели 20 слов ищем "слово1" нет результатов перешли к "слово2", а так получится, что ты сразу будеш искать все.
Спустя 28 минут, 58 секунд (31.05.2010 - 19:17) igor717 написал(а):
А чем не подходит вариант:
1. Разбить строку запроса на отдельный слова и загнать в массив
2. Переборам получившегося массива из отдельных слов сформировав массив с запросом
3. Распаковать массив с запросом в запросе к БД
Получится 1 обращение к БД вида
После распаковки конечно...
1. Разбить строку запроса на отдельный слова и загнать в массив
2. Переборам получившегося массива из отдельных слов сформировав массив с запросом
3. Распаковать массив с запросом в запросе к БД
Получится 1 обращение к БД вида
SELECT * FROM `table` WHERE content like '%key1%' or like '%key2%' or like '%key3%'
После распаковки конечно...