mar_a
Новичок
like сортировка по максимальному совпадению.
Есть самый простой запрос (например)
select x.name from table as x where x.name like "%$search%";
Результат этого запроса незаставит себя ждать и отобразит полный перечень поля х.name
удовлетворяющий условию.
Необходимо отсортировать результаты по максимальному совпадению как фразы так и количества фраз.
Напрмер в БД поле name содержит
Sony - 1
Sony PSP One
Sony PSP -3
Sony One
Ericsson Two
Sony Ericsson One
Sony Ericsson Two
При $search = on
Необходимо что-бы полученный результат запроса отсортировал
по максимальному кол-ву совпадений встречающихся в поле x.name
А именно:
Son y Ericsson Оne ///3 совпадения
Sony One /// 2 совпадения - но искомые комбинации на минимальном удалении друг от друга , поэтому ранжируется выше нежели остальные
Sony PSP one /// 2 совпадения
Son y Ericsson Two /// 2 совпадения
Sony - 1 ///1совпадение
Sony PSP -3 ///1совпадение
Ericsson Two ///1 совпадение но оно дальше от начала строки , следовательно имеет меньший приоритет
Вопрос собственно как наложить условие сортировки в SQL запрос дабы добится нужного эффекта?
Далее усложняю задачу
При $search1 = Sony
$search2=Ericsson
select x.name from table as x where x.name like "%$search1%" OR x.name like "%$search2%";
Необходимо добиться результата:
Sony Ericsson One ///максимально благоприятное нахождение
Sony Ericsson Two
И далее с одним совпадением из 2-х возможных
Sony - 1
Sony PSP One
Sony PSP -3
Sony One
Ericsson Two
Вопрос как составить запрос? (или серию запросов).
Отдельное спасибо за Ваши предложения об улучшении (быть может я не вижу банального).
Есть самый простой запрос (например)
select x.name from table as x where x.name like "%$search%";
Результат этого запроса незаставит себя ждать и отобразит полный перечень поля х.name
удовлетворяющий условию.
Необходимо отсортировать результаты по максимальному совпадению как фразы так и количества фраз.
Напрмер в БД поле name содержит
Sony - 1
Sony PSP One
Sony PSP -3
Sony One
Ericsson Two
Sony Ericsson One
Sony Ericsson Two
При $search = on
Необходимо что-бы полученный результат запроса отсортировал
по максимальному кол-ву совпадений встречающихся в поле x.name
А именно:
Son y Ericsson Оne ///3 совпадения
Sony One /// 2 совпадения - но искомые комбинации на минимальном удалении друг от друга , поэтому ранжируется выше нежели остальные
Sony PSP one /// 2 совпадения
Son y Ericsson Two /// 2 совпадения
Sony - 1 ///1совпадение
Sony PSP -3 ///1совпадение
Ericsson Two ///1 совпадение но оно дальше от начала строки , следовательно имеет меньший приоритет
Вопрос собственно как наложить условие сортировки в SQL запрос дабы добится нужного эффекта?
Далее усложняю задачу
При $search1 = Sony
$search2=Ericsson
select x.name from table as x where x.name like "%$search1%" OR x.name like "%$search2%";
Необходимо добиться результата:
Sony Ericsson One ///максимально благоприятное нахождение
Sony Ericsson Two
И далее с одним совпадением из 2-х возможных
Sony - 1
Sony PSP One
Sony PSP -3
Sony One
Ericsson Two
Вопрос как составить запрос? (или серию запросов).
Отдельное спасибо за Ваши предложения об улучшении (быть может я не вижу банального).