SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.10.2009 14:41:40

Warlrus
Участник
Зарегистрирован: 08.10.2009
Сообщений: 4

Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

К примеру у меня перменная в php $slovo='ящерица';
А в таблице у меня есть запись №3 в которой колонка slovo = 'ящер'.Видно что слова частично совпадают.Как мне с помощью этого совпадения вывести другую колнку записи №3.Конечно проблему можно решить выодом всех данных из таблицу по типу *,но это не выход
Какой в этом случае должен быть запрос?

Очень буду благодарен за качественный ответ

Неактивен

 

#2 08.10.2009 14:57:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

SELECT * FROM tablename WHERE slovo LIKE 'ящер%';

Неактивен

 

#3 08.10.2009 15:19:30

Warlrus
Участник
Зарегистрирован: 08.10.2009
Сообщений: 4

Re: Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

Спасибо за ответ! Но это не подходит,мне нужен обратный случай,у меня в таблице находится корень слова,и надо по этому корню узнать тип слова:существительное,прилагательное и т д .

Неактивен

 

#4 08.10.2009 15:56:01

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

Да, моя вина, невнимательно прочитал sad

Тогда идеальных решений, которые бы еще и индекс использовали, я сходу не вижу.
Я бы попробовал тогда делать пачкой запросов вида:
SELECT * FROM tablename WHERE slovo = 'ящерица'; -- fail
SELECT * FROM tablename WHERE slovo = 'ящериц'; -- fail
...
SELECT * FROM tablename WHERE slovo = 'ящер';  -- success

Такая пачка будет работать быстрее, чем полный скан таблицы запроса
WHERE 'ящерица' LIKE CONCAT(slovo, '%');

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

Неактивен

 

#5 08.10.2009 16:15:50

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

К слову сказать, всегда можно пойти биекцией:
SELECT * FROM tablename WHERE slovo LIKE 'яще%';

Неактивен

 

#6 08.10.2009 16:16:15

Warlrus
Участник
Зарегистрирован: 08.10.2009
Сообщений: 4

Re: Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

Спасибо большое!smile

Неактивен

 

#7 08.10.2009 16:17:50

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

Оу, я редактировал, пока Вы писали - собственно, придумал простую биекцию,
сверху можно же не ограничивать, ну, вытащите три строки - со стороны кода найти
более подходящее уже просто.

Неактивен

 

#8 09.10.2009 12:13:13

Lem0nti
Гуру
Откуда: Северная Пальмира
Зарегистрирован: 08.11.2007
Сообщений: 98

Re: Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

Может быть в данном случае использовать полнотекстовый индекс?

Неактивен

 

#9 09.10.2009 12:20:55

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Здраствуйте! Как в Mysql вырполнить фрагмаентированный поиск?

Полнотекстовый ищет полные слова, частичные совпадения он не умеет искать совсем sad

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson