Как я только не пробовалАвтор оригинала: Фанат
меня всегда умиляет, когда в ответ на желание одним запросом пишут юнион.
просто офигенная сообразительность
Одно только непонятно - зачемКак я только не пробовал
искал, такого небыло. Был похожый по нахождению ближайшего числа (одного), а мне нужно длижайшее с верхи и снизу (два числа)Автор оригинала: zerkms
подобный вопрос был "недавно" думаю месяца 3 назад, не более
так что в поиск
WP
решение было в 1 запрос как ни странно![]()
Зачем пробовал, или зачем находить диапазон?Автор оригинала: Фанат
Одно только непонятно - зачем
интересный вариант.Автор оригинала: chira
Код:select MAX(IF(k<=12,k,NULL)) start , MIN(IF(k>=12,k,NULL)) end from mytable
гы-гы-гы!Но кроме значения k нужно значение v
mysql> select * from t;
+----+---------+
| id | data_id |
+----+---------+
| 1 | 1 |
| 2 | 1 |
| 1 | 1 |
| 2 | 1 |
| 1 | 2 |
| 4 | 2 |
| 1 | 3 |
| 1 | 3 |
| 3 | 1 |
| 1 | 5 |
| 2 | 5 |
| 3 | 5 |
| 4 | 5 |
| 5 | 10 |
| 6 | 20 |
| 7 | 22 |
| 8 | 30 |
+----+---------+
17 rows in set (0.00 sec)
mysql> explain
-> select MAX(IF(data_id<=21,data_id,NULL)) start, MIN(IF(data_id>=21,data_id,NULL)) end
-> from t
-> ;
+----+-------------+-------+-------+---------------+-----------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+-----------+---------+------+------+-------------+
| 1 | SIMPLE | t | index | NULL | t_data_id | 5 | NULL | 17 | Using index |
+----+-------------+-------+-------+---------------+-----------+---------+------+------+-------------+
1 row in set (0.00 sec)
mysql> select MAX(IF(data_id<=21,data_id,NULL)) start, MIN(IF(data_id>=21,data_id,NULL)) end
-> from t
-> ;
+-------+------+
| start | end |
+-------+------+
| 20 | 22 |
+-------+------+
1 row in set (0.00 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 4.1.11-nt |
+-----------+
1 row in set (0.02 sec)
...+---------------+-----------+...
...| possible_keys | key | ...
...+---------------+-----------+...
...| NULL | t_data_id | ...
...+---------------+-----------+...
Но кроме значения k нужно значение v
select MAX(IF(k<=12,k,NULL)) startk
, MIN(IF(k>=12,k,NULL)) endk
, SUBSTR( MAX( CONCAT( LPAD(IF(k<=12,k,NULL),10,'0'), v )),11) startv
, SUBSTR( MIN( CONCAT( LPAD(IF(k>=12,k,NULL),10,'0'), v )),11) endv
from mytable