SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.06.2016 15:38:45

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Основываясь на текущий ID вывести бижайшие записи по дате

Здравствуйте,

Таблица

1  2013-06-08 00:00:00
2  2012-06-08 00:16:00
3  2015-06-08 00:34:00
4  2014-06-08 00:26:00
5  2016-06-08 00:59:00
...

Можно ли одним запросом вывести данные в таком виде, если задан ID=4
5  2016-06-08 00:59:00
3  2015-06-08 00:34:00
4  2014-06-08 00:26:00   -  текущая запись
1  2013-06-08 00:00:00
2  2012-06-08 00:16:00
...


Здесь вывелись 2-ве ближайшие записи сверху, затем текущая запись с ID=4 и последующие N записей.  Все отсортированно по дате.
Чтобы нагляднее увидеть для чего это надо, вот ссылка (блок справа).

Сейчас записи идут по айди, с этим много проблем, например когда пост создан, а опубликован аж через год, то весь список ломается.

Спасибо!

Отредактированно Марк (08.06.2016 15:41:20)

Неактивен

 

#2 08.06.2016 15:59:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Основываясь на текущий ID вывести бижайшие записи по дате

select .. from `таблица` where col_date<(select col_date from `таблица` where id=4) order by col_date desc limit 2
union all
select .. from `таблица` where id=4
union all
select .. from `таблица` where col_date>(select col_date from `таблица` where id=4) order by col_date limit N;

Неактивен

 

#3 08.06.2016 16:23:45

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Основываясь на текущий ID вывести бижайшие записи по дате

Боюсь, error UNION and ORDER BY будет, но сейчас попробую

Отредактированно Марк (08.06.2016 16:24:17)

Неактивен

 

#4 08.06.2016 16:27:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Основываясь на текущий ID вывести бижайшие записи по дате

Тогда
select .. from (
(select .., 1 as x from `таблица` where col_date<(select col_date from `таблица` where id=4) order by col_date desc limit 2)
union all
(select .., 2 from `таблица` where id=4)
union all
(select .., 3 from `таблица` where col_date>(select col_date from `таблица` where id=4) order by col_date limit N)) t
order by x;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson