|
|
|
| В таблице хранятся данные
id | date | text
51690|12.07.2007 19:13|Текст 1
51685|12.07.2007 18:27|Текст 2
51664|12.07.2007 17:13|Текст 3
51684|12.07.2007 17:02|Текст 4
51683|12.07.2007 16:28|Текст 5
51682|12.07.2007 16:23|Текст 6
|
Нужно выбрать скажем из базы по id = 51684 и чтобы при этом захватить и вывести на экран id 51664 и 51683 и запихать эти id разные переменные ($pervious и $next).
Как это сделать? | |
|
|
|
|
|
|
|
для: smit272
(09.08.2007 в 21:15)
| | Как-то так:
SELECT prev, next, id, tbl.*
FROM
tbl AS t
JOIN
(SELECT c.id, MAX(p.id) AS prev, MIN(n.id) AS next
FROM tbl AS c
LEFT JOIN tbl AS p ON c.id > p.id
LEFT JOIN tbl AS n ON c.id < n.id
GROUP BY c.id
) AS ids ON t.id = ids.id
WHERE t.id = $id
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.08.2007 в 06:07)
| |
Позвольте офтоп небольшой, но мудрый
За что я люблю Oracle:)
WITH tbl AS
(
SELECT 51690 ID, TO_DATE ('12.07.2007') dat
FROM DUAL
UNION ALL
SELECT 51685 ID, TO_DATE ('12.07.2007') dat
FROM DUAL
UNION ALL
SELECT 51664 ID, TO_DATE ('12.07.2007') dat
FROM DUAL
UNION ALL
SELECT 51684 ID, TO_DATE ('12.07.2007') dat
FROM DUAL
UNION ALL
SELECT 51683 ID, TO_DATE ('12.07.2007') dat
FROM DUAL
UNION ALL
SELECT 51682 ID, TO_DATE ('12.07.2007') dat
FROM DUAL)
-- сам запрос
SELECT *
FROM (SELECT ID, LAG (ID, 1, 0) OVER (ORDER BY ID) AS prev_value,
LEAD (ID, 1, 0) OVER (ORDER BY ID) AS next_values
FROM tbl) tbl2
WHERE tbl2.ID = $id;
|
| |
|
|
|