Мама мыла раму папе. Как сравнить по буквам и отсортировать их по количеству свопадений? - MySQL
Формулировка задачи:
Дано таблица, длина у слов одинакова:
мама
мыла
раму
папе
авто
есть слово для сравнения:папа
соответственно совпадений со буквам
папе - 3 (ПАПе)
мама - 2 (мАмА)
мыла - 1 (мылА)
раму - 1 (рАму)
авто - 0 (авто)
если что текст на английском, т.ч. не надо морочится с длиной символов в utf-8 и т.п.
Всем заранее спасибо!
P.S. сейчас выбираю все из базы и каждый элемент сравниваю в лоб
$good = 0; for($x=0;$x < strlen($aa2);$x++){ if($aa2[$x] == $answ[$x]){ $good++; }
Решение задачи: «Мама мыла раму папе. Как сравнить по буквам и отсортировать их по количеству свопадений?»
textual
Листинг программы
WITH q AS (SELECT 'папа' AS a FROM dual) , w AS (SELECT 'мама' AS a FROM dual UNION ALL SELECT 'мыла' FROM dual UNION ALL SELECT 'раму' FROM dual UNION ALL SELECT 'папе' FROM dual UNION ALL SELECT 'авто' FROM dual) SELECT * FROM (SELECT q.a AS qa, w.a AS wa, ((CASE WHEN substr(q.a,1,1) = substr(w.a,1,1) THEN 1 ELSE 0 END) + (CASE WHEN substr(q.a,2,1) = substr(w.a,2,1) THEN 1 ELSE 0 END) + (CASE WHEN substr(q.a,3,1) = substr(w.a,3,1) THEN '1' ELSE '0' END) + (CASE WHEN substr(q.a,4,1) = substr(w.a,4,1) THEN '1' ELSE '0' END)) AS qwer FROM q, w) WHERE qwer > 2
Объяснение кода листинга программы
- Создается CTE (Common Table Expression)
q
с одним столбцомa
, содержащим значение 'папа'. - Создается CTE
w
с одним столбцомa
, содержащим значения 'мама', 'мыла', 'раму', 'папе', 'авто'. - Создается запрос, который выбирает каждую букву из строк 'папа' и 'мама мыла раму папе авто', и проверяет, совпадают ли они. Для каждой пары букв, которые совпадают, добавляется единица к общему числу совпадений.
- Результат этого запроса (число совпадений) используется в следующем запросе, где он фильтруется таким образом, чтобы остались только те строки, где число совпадений больше 2.
- Выводятся результаты, которые содержат исходные строки и количество совпадений.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д