Текущий ответ работает для примера, который дал ОП, но на самом деле он не отвечает на вопрос. ОП запрашивает запрос, упорядочивающий по наиболее распространенным символам, но этот запрос работает только в том случае, если запись БД содержит подмножество символов в поисковом запросе и ничего более.
Например, сравнение name111someignorechar с name1otherignorechar не будет работать.
Есть другое решение, как описано здесь:
http://tech -q-a.tumblr.com / запись / 58713827644 / как к сортировки результатов на основе-на-число-тождественны
Мы можем использовать функцию MySQL, которая считает количество идентичных начальных символов для двух строк:
DROP FUNCTION IF EXISTS countMatchingBeginChars;
delimiter //
CREATE FUNCTION `countMatchingBeginChars`( s1 text, s2 text ) RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE s1_len, s2_len, min_len, j INT;
SET s1_len = LENGTH(s1), s2_len = LENGTH(s2);
IF s1_len > s2_len THEN
SET min_len = s2_len;
ELSE
SET min_len = s1_len;
END IF;
SET j = 0;
WHILE j <= min_len DO
SET j = j + 1;
IF SUBSTRING(s1,j,1) != SUBSTRING(s2,j,1) THEN
RETURN j-1;
END IF;
END WHILE;
RETURN min_len;
END//
delimiter ;
Итак,
SELECT countMatchingBeginChars("name111someignorechar", "name11")
вернул бы 6 (как указано выше), но так же
SELECT countMatchingBeginChars("name111someignorechar", "name11otherignore")
Теперь мы можем отсортировать записи в базе данных по количеству совпадающих символов:
SELECT name FROM names ORDER BY countMatchingBeginChars("name111someignorechar",name) DESC, name
Если требуется только запись с наиболее подходящими символами, мы можем просто вернуть только один результат.
SELECT name FROM names ORDER BY countMatchingBeginChars("name111someignorechar",name) DESC, name LIMIT 1