Mysql Select Следующая и Предыдущая строка не упорядочены по идентификатору - PullRequest
7 голосов
/ 16 декабря 2010

У меня есть запрос, заказанный NAME, который возвращает smt следующим образом:

 ID     NAME
2121927 AAA
2123589 AAB
2121050 AAC
2463926 BBB ---> known ID
2120595 CCC
2122831 DDD
2493055 EEE
2123583 EEF

Мне нужно знать следующий идентификатор и предыдущий идентификатор (если существует) известного идентификатора && NAME. Как это возможно столько 1 запрос?

Ответы [ 2 ]

12 голосов
/ 16 декабря 2010
  SELECT *,
         'next'
    FROM table
   WHERE `name` > 'BBB'
ORDER BY `name`
   LIMIT 1

UNION

  SELECT *,
         'previous'
    FROM table
   WHERE `name` < 'BBB'
ORDER BY `name` DESC
   LIMIT 1

Если вы не знаете конкретное значение поля BBB name - вы можете заменить его подзапросом, например SELECT name FROM table WHERE id = 42, где 42 - известное значение ID.

0 голосов
/ 26 июля 2012

Я сделал это так:
Он не самый быстрый, но не заботится о порядке полей.
Запросите все строки из БД в нужном вам порядке.
Используйте php foreach для поиска текущего идентификатора.
Получить индекс массива текущего идентификатора, сделать индекс +1 или индекс -1.

$current_id = 6;
$data = get_all_data_from_db();
foreach($data as $index=>$row) {
if($current_id == $row['id']) {
$next = $index+1;
$prev = $index-1;
}
$previous_row = $data[$prev];
$next_row = $data[$next];

...