Есть 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?
Или надо только средствами 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....
ПРимерный результат Vasja, Oleg
Больше Marina
Меньше Mawa
Ghost, ну если сделать через union- выбрать 2-х с рез <= 13 и 2-х с рез >=13 то как нам узнать кто ближе!!? то что было выбрано в <= или которая в >=!??!? Ведь число 14 будет ближе чем 28....
Спустя 7 часов, 44 минуты, 10 секунд (11.07.2008 - 10:38) sergeiss написал(а):
Вадик, а ты начни писать запрос, там дальше пронятнее будет 
Можно так сделать, например:

Можно так сделать, например:
Код |
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-е значение второй. ну и так далее
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-е значение второй. ну и так далее