Mysql下一个上一行排序

时间:2014-03-04 16:37:14

标签: mysql database

我有桌子

pages_id  aliases_name          pages_name                                 
--------  --------------------  ------------------
  88      main                  Главная                             
  90      novyny                Новости                             
  91      usluhy                Главная                             
  92      pomoshch              Помощь                               
  93      contact               Контакты                           
  94      dobavyt_nedvyzhymost  Главная                             
 132      zabyly_parol          Главная                              
 133      registration          Регистрация                     
 134      vashy_dannye          Ваши данные                      
 135      vashy_obiavlenyia     Ваши объявления              
 136      aktyvatsyia           Активация                         
 137      pravyla_y_uslovyia    Правила и условия           
 138      smena_parolia         Смена пароля                    
 140      about                 о нас  

表格结构:

CREATE TABLE `a_pages_pages` (
  `pages_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `aliases_name` varchar(255) NOT NULL,
  `pages_name` varchar(255) NOT NULL,
  PRIMARY KEY (`pages_id`)
) ENGINE=MyISAM AUTO_INCREMENT=157 DEFAULT CHARSET=utf8

表格中的数据:

insert into `a_pages_pages` (`pages_id`, `aliases_name`, `pages_name`)  
values('88','main','Главная'), ('90','novyny','Новости'),  
      ('91','usluhy','Главная'), ('92','pomoshch','Помощь'),  
      ('93','contact','Контакты'), ('94','dobavyt_nedvyzhymost','Главная'),  
      ('132','zabyly_parol','Главная'), ('133','registration','Регистрация'),  
      ('134','vashy_dannye','Ваши данные'),
      ('135','vashy_obiavlenyia','Ваши объявления'),  
      ('136','aktyvatsyia','Активация'),  
      ('137','pravyla_y_uslovyia','Правила и условия'),
      ('138','smena_parolia','Смена пароля'), ('140','about','о нас')

我得到简单的查询...

SELECT pages_id, aliases_name, pages_name
FROM a_pages_pages
ORDER BY pages_name ASC

当我从这个查询中知道一些ID(当前行)时:

pages_id  aliases_name          pages_name                                 
--------  --------------------  ------------------
 136      aktyvatsyia           Активация                         
 134      vashy_dannye          Ваши данные                      
 135      vashy_obiavlenyia     Ваши объявления              
  91      usluhy                Главная                       
 132      zabyly_parol          Главная               <<<< prev row
  88      main                  Главная               <<<< current row
  94      dobavyt_nedvyzhymost  Главная               <<< next row
  93      contact               Контакты                           
  90      novyny                Новости                             
 140      about                 о нас                                  
  92      pomoshch              Помощь                               
 137      pravyla_y_uslovyia    Правила и условия           
 133      registration          Регистрация                     
 138      smena_parolia         Смена пароля                    

我需要从此查询中获取ID prev行和ID下一行.....


那一刻我所知道的 ORDER BY - 我有哪些栏目和排序顺序。顺序可以是w
pages_id - 来自php。

PS。使用一些脚本


下一步:

SELECT pages_id, aliases_name, pages_name
FROM a_pages_pages
WHERE pages_name > 'Главная'
ORDER BY pages_name ASC, pages_id DESC
LIMIT 0, 1

不工作,因为我pages_id = 132,88,94,然后next_id = 132

并且有职位

SELECT * 
(SELECT 
    `pages_id` AS `id`, @pos := @pos + 1 AS `position` 
FROM
    `a_pages_pages`, 
    (SELECT 
        @pos := 0) AS `p_table` 
ORDER BY `pages_name` ASC) 
WHERE `position` >

???我不知道POSITION

1 个答案:

答案 0 :(得分:0)

尝试这个它会通过传递当前页面ID也给你下一个和上一个页面ID,如果pageid是第一个,那么它将给你最后一个页面ID,如下面的查询我已经使用了页面ID 88 ,并使用page_id列进行订购,因此很容易获得订单

SELECT 
  COALESCE(
    (SELECT 
      pages_id 
    FROM
      a_pages_pages 
    WHERE pages_id < 88 
    ORDER BY pages_id DESC 
    LIMIT 1),
    (SELECT 
      MAX(pages_id) 
    FROM
      a_pages_pages)
  ) AS `prev`,
  COALESCE(
    (SELECT 
      pages_id 
    FROM
      a_pages_pages 
    WHERE pages_id > 88 
    ORDER BY pages_id 
    LIMIT 1),
    (SELECT 
      MIN(pages_id) 
    FROM
      a_pages_pages)
  ) AS `next` 

示例输出

PREV   NEXT
140    90

See fiddle Demo