![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
К примеру у меня перменная в php $slovo='ящерица';
А в таблице у меня есть запись №3 в которой колонка slovo = 'ящер'.Видно что слова частично совпадают.Как мне с помощью этого совпадения вывести другую колнку записи №3.Конечно проблему можно решить выодом всех данных из таблицу по типу *,но это не выход
Какой в этом случае должен быть запрос?
Очень буду благодарен за качественный ответ
Неактивен

SELECT * FROM tablename WHERE slovo LIKE 'ящер%';
Неактивен
Спасибо за ответ! Но это не подходит,мне нужен обратный случай,у меня в таблице находится корень слова,и надо по этому корню узнать тип слова:существительное,прилагательное и т д .
Неактивен

Да, моя вина, невнимательно прочитал ![]()
Тогда идеальных решений, которые бы еще и индекс использовали, я сходу не вижу.
Я бы попробовал тогда делать пачкой запросов вида:
SELECT * FROM tablename WHERE slovo = 'ящерица'; -- fail
SELECT * FROM tablename WHERE slovo = 'ящериц'; -- fail
...
SELECT * FROM tablename WHERE slovo = 'ящер'; -- success
Такая пачка будет работать быстрее, чем полный скан таблицы запроса
WHERE 'ящерица' LIKE CONCAT(slovo, '%');
Ну и, разумеется, можно написать процедуру, которая будет пытаться выбрать
значения из таблицы, постоянно отрезая по одной букве с хвоста. Если будете
отрезать процедурой - осторожно относитесь к многобайтовым кодировкам,
нужно отрезать именно букву, а не байт.
Неактивен

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

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

Полнотекстовый ищет полные слова, частичные совпадения он не умеет искать совсем ![]()
Неактивен
Страниц: 1