Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Предыдущая и Следующая строчки
 
 автор: smit272   (09.08.2007 в 21:15)   письмо автору
 
 

В таблице хранятся данные


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).
Как это сделать?

   
 
 автор: Trianon   (10.08.2007 в 06:07)   письмо автору
 
   для: 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

   
 
 автор: oradev   (10.08.2007 в 13:37)   письмо автору
 
   для: 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;

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования