[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка по сходству
BorodinKO
Существует таблица некая таблица
table(id, name, typem ,color)

table
id name type color
1 r 2 1
2 k 4 2
3 l 1 2
4 m 8 1
5 d 4 2
6 k 1 2
7 e 4 1
8 l 1 2
9 k 1 4

Мне нужно вывести строки максимально похожие на 3ю строку но при этом этих похожих строк должно быть не мение 5
id    name        type        color
3 l 1 2

Пытаюсь сделать так:
SELECT id FROM `table` WHERE (name = l OR type = 1 OR color = 2) AND id!=3 LIMIT 0, 5;

id    name        type        color
2 k 4 2
5 d 4 2
6 k 1 2
8 l 1 2
9 k 1 4

Получаю вот такой результат, по сути все выведенные строки имеют схожести с 3тей строкой но отсортированы по id(вернее вообще не отсортированы)
Мне нужно сделать так что бы первой строкой выводилось максимально схожий результат, тоесть 8 строка затем 6 затем 9
ORDER BY name не поможет так как он будет сортировать по алфавиту а не по сходству с l

ВНИМАНИЕ ВОПРОС!
как мне реализовать сортировку сходству (по маске) ?
T1grOK

SELECT
*,
(
IF (name = 1, 1, 0) + IF (type = 1, 1, 0) + IF (color = 2, 1, 0)) as relevant
WHERE
(name = l OR type = 1 OR color = 2) AND id!=3
ORDER BY relevant DESC
LIMIT
0, 5;


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
BorodinKO
Не могу понять синтаксис (name = 1, 1, 0) , при чем здесь 1,1,0 ?
Placido
Это функция IF(). Если условие name = 1 (name = 1, 1, 0) выполнено, то возвращается 1 (name = 1, 1, 0), если нет, то 0 (name = 1, 1, 0).
BorodinKO
Дело в том что поле name у меня varchar и там не может быть единицы там буква ЭЛЬ L l
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.