MySQL: выбор строки по идентификатору с предыдущей и следующей строк по дате - PullRequest
1 голос
/ 30 декабря 2011

У меня есть эта таблица:

update_id | project_id | content | date
------------------------------------------------------
1         | 1          | text... | 2011-12-20 22:10:30 
2         | 2          | text... | 2011-12-20 22:10:30 
3         | 2          | text... | 2011-12-21 22:10:30 
4         | 2          | text... | 2011-12-22 22:10:30 
5         | 2          | text... | 2011-12-23 22:10:30 

Мой текущий запрос:

SELECT update_id, project_id, content, date
FROM update
WHERE update_id = 2
AND project_id = 2
ORDER BY date DESC
LIMIT 1

Но помимо выбранной строки я хочу получить также предыдущую и следующую строки на основестолбец даты (для определенного идентификатора проекта), поэтому я могу отображать ссылки «предыдущее обновление» и «следующее обновление» (если доступно).

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Первый подход.Этот выбор возвращает 3 строки.Выбранная вами строка и строка для предыдущей даты и строка анодера для следующей даты:

SELECT * FROM ( 
 SELECT 
   'THIS' as update_time,
   update_id, 
   project_id, 
   content, 
   date
 FROM 
   `update`
 WHERE 
   update_id = 2 AND project_id = 2
 ORDER 
   BY date DESC
 LIMIT 1
) TT
UNION
SELECT * FROM ( 
 SELECT 
   'PREVIOUS'  as update_time,
   update_id, 
   project_id, 
   content, 
   date
 FROM 
   `update`
 WHERE 
   update_id <> 2 AND project_id = 2 and
   date <= (select date from `update` where update_id = 2)
 ORDER 
   BY date DESC
 LIMIT 1
) TP
UNION
SELECT * FROM ( 
 SELECT 
   'NEXT'  as update_time,
   update_id, 
   project_id, 
   content, 
   date
 FROM 
   `update`
 WHERE 
   update_id <> 2 AND project_id = 2 and
   date >= (select date from `update` where update_id = 2)
 ORDER 
   BY date ASC
 LIMIT 1
) TN
0 голосов
/ 30 декабря 2011

Вам нужно 2 суб-выбора .. но теперь, чтобы связать их.

SELECT @rownum:=@rownum+1 as place, update_id, project_id, content, date, () as previous, () as next, (SELECT @rownum:=0)

, где пробел () заменяется подзапросами той же формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...