Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Задача следующая.
Есть база слов русского языка и есть набор букв, например "ОПРСТ", из которых нужно составить слова.
Т.е. из базы должны быть выбраны слова СПОРТ, СОР, ПОРТ и т.д.
Запрос
SELECT * FROM `table` WHERE `word` regexp '^[ОПРСТ]+$'
выбирает слова по заданным буквам.
Но как сделать, чтобы каждая буква использовалась только один раз?
Т.е. чтобы не выдавало, например, слово ТОРТ?
Неактивен
SELECT * FROM `table` WHERE `word` regexp '^[ОПРСТ]+$' AND `word` not regexp 'Т.*Т' AND ..
Неактивен
Не совсем верно.
Из букв "ОРТТ" должно составиться слово "ТОРТ", но запрос этого не делает.
Неактивен
paa написал:
Но как сделать, чтобы каждая буква использовалась только один раз?
Т.е. чтобы не выдавало, например, слово ТОРТ?
paa написал:
Не совсем верно.
Из букв "ОРТТ" должно составиться слово "ТОРТ", но запрос этого не делает.
Вам не кажется, что это взаимоисключающие требования?
Неактивен
Нет, не взаимоисключающие.
Нужно составить слова из заданных символов.
Сколько раз символ встречается в заданном множестве, столько раз его и можно использовать
В первом наборе "ОПРСТ" - одна буква "Т", торт не подходит.
Во втором наборе "ОРТТ" - две буквы "Т", торт должен быть.
Неактивен
.. and `word` regexp 'Т{0,2}' ..
Неактивен
Таким запросом можно обработать только две идущих подряд буквы, как например в слове "ОТТОК". А в слове "ТОРТ" он не считает "Т" за два вхождения.
Неактивен
Ну тогда кроме как считать количество вхождений подстроки в строку в голову не приходит, т.е. изврат вида
Неактивен
в вашем случае будет <=2 and ...
Неактивен
Вот и мне в голову только извратные решения приходят. А думал, вдруг есть что-то красивое.
В любом случае, спасибо за помощь!
Неактивен
Страниц: 1