[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка примерных(более близких) значений из базы
G.Vad!k
Помогите, пожалуйста! давно уже не могу решить проблему такую:
Есть mysql база результатов
id.........resultat.........name
1.........12..................Vasja
2 .........6 ..................Mawa
3 .........28..................Petja
4.........14..................Marina
5.........12..................Oleg

И есть результат, к примеру 13. Как сделать выборку из базы, чобы узнать кто(один) из базы ближе к 13, кто отстает, а кто опережает...

Помогите, очень нужно!



Спустя 13 минут, 58 секунд (10.07.2008 - 18:55) Бармалейкин написал(а):
бредовая идея: получить отсортированный список по resultat, затем искать вверх и вниз по следующему значению...
Или надо только средствами SQL?

Спустя 1 час, 29 минут, 12 секунд (10.07.2008 - 20:25) Ghost написал(а):
либо через union- выбрать 2-х с рез <= 13 и 2-х с рез >=13
ксати, а что делать если у нес-ких челов результаты совпадут?

Спустя 6 часов, 29 минут, 26 секунд (11.07.2008 - 02:54) G.Vad!k написал(а):
Бармалейкин, мне в принципе без разницы... Главное получить результат! Надо чтобы
ПРимерный результат Vasja, Oleg
Больше Marina
Меньше Mawa

Ghost, ну если сделать через union- выбрать 2-х с рез <= 13 и 2-х с рез >=13 то как нам узнать кто ближе!!? то что было выбрано в <= или которая в >=!??!? Ведь число 14 будет ближе чем 28....

Спустя 7 часов, 44 минуты, 10 секунд (11.07.2008 - 10:38) sergeiss написал(а):
Вадик, а ты начни писать запрос, там дальше пронятнее будет smile.gif
Можно так сделать, например:

Код
select resultat, name,
case when resultat=13 then 0
when resultat>13 then 1
else -1
end
as res_sign,
abs( resultat-13 ) as abs_res
from your_table

В результате выполнения запроса получим таблицу, в которой будем иметь как начальные данные, так и 2 новых колонки: знак разности между результатом и числом 13 и модуль этой разности.

Далее можно начинать думать, как это использовать.
В частности, можно объединить этот подход с тем, что предложил Ghost. То есть, сначала использовать union для выделения нужных строк, а затем уже определять знак и модуль разности между результатом и пороговым числом... Причем, всё это будет в одном запросе. Для этого достаточно в моем селекте на месте your_table поставить ту выборку, которая через union будет получена.

Спустя 2 часа, 58 минут, 13 секунд (11.07.2008 - 13:36) Ghost написал(а):
сравнивать не пробовал)?
select * from `table` where `result` <=13 order by `result` desc limit 2
select * from `table` where `result` >13 order by `result` limit 2
затем сравнить что ближе к 13-ти, 1-е значение 1-й выборки или 1-е значение второй. ну и так далее
Быстрый ответ:

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