2012-03-12 4 views
4

Потребность оптимизирован запрос на ниже функции поисказаказ по ближайшему значению в MySQL

Таблица продукта

Product  att1 att2  att3 att4 att5 

p1   1  2   2  3  2 
p2   4  1   1  5  5 
p3   5  3   5  3  2 
p4   4  4   2  1  1 

, если поиск пользователя att1 = 3, ATT2 = 2 и att3 = 5

затем, нам необходимо отобразить все записи в порядке максимально возможного оценок всех необходимых атрибутов

Примечание: - в первой строке есть только одна позиция найденных совпадений. - во второй строке ничего не найдено, - в третьем ряду один соответствует найдено

Так на основе числа согласования, мы должны упорядочить записи, Если точное совпадение не найдено, то отдых на поиск элементов

+1

Возможно, поиск не по '=', а по 'attx> = queryValue - lowRange AND attx <= queryValue + highRange', а также добавить вычисленное поле к выбору, равному' attx - queryValue AS distancex', это поле будет содержать расстояние совпадения от указанного значения, и вы можете использовать его для сортировки. – Yaniro

ответ

3
select * from product 
order by (att1 = 3) + (att2 = 2) + (att3 = 5) desc 

Это работает, потому что в MySQL true является 1 и false является 0, поэтому суммируя условия дает ряд критериев поиска соответствует. Заказ desc возвращает их «ближайшая совпадение первая»

+0

просто идеальный ... –

+0

не работает. – Pradeep

+1

что именно вы подразумеваете под словом «не работает»? – Bohemian

Смежные вопросы