Выбор предыдущей и следующей строк в MySQL - как?

0

Я не могу понять, как выбрать предыдущую/следующую строку, если текущая строка не имеет числовых идентификаторов.

С числовым значением я всегда использую 2 запроса:

  SELECT min(customer_id) 
    FROM customers 
   WHERE `customer_id` < 10 
GROUP BY customer_status 
ORDER BY customer_name ASC 
  LIMIT 1;

  SELECT max(customer_id) 
    FROM customers 
   WHERE `customer_id` > 10 
GROUP BY customer_status 
ORDER BY customer_name DESC 
   LIMIT 1;

Однако у меня больше нет "customer_id" и только "customer_name". Когда я запрашиваю DB и сортирую по этому столбцу, я получаю:

Ab
Bb
Cc
Dd
Ee

Предположим, что мое текущее имя клиента - "Cc". Я хочу иметь возможность выбрать "Bb" и "Dd" из БД. Как?:)

  • 0
    Так же, как с числовыми идентификаторами
  • 0
    Я думаю, что вы ищете аналитические функции LEAD & LAG, которые не поддерживаются MySQL. Но вы можете прочитать эту статью о том, как эмулировать функциональность: объяснение xtended.com/2009/03/10/…
Теги:
database

2 ответа

0
Лучший ответ

я бы выбрал предыдущий с...

  SELECT MAX(customer_name) 
    FROM customers 
   WHERE `customer_name` < 'Cc' 
  LIMIT 1;

а следующий с...

  SELECT MIN(customer_name) 
    FROM customers 
   WHERE `customer_name` > 'Cc' 
   LIMIT 1;

Ты, где почти там, я думаю.

Изменить: Удалены лишние операторы ORDER BY, предложенные Col. Shrapnel.

  • 1
    Я считаю, что порядок здесь не нужен.
  • 0
    Вы совершенно правы, полковник Шрапнель. Мистер Копия и мистер Паст снова бьют.
Показать ещё 1 комментарий
1

Строки не имеют порядка, mysql сохраняет строки в любом порядке. Его называют кластеризацией. Вы используете LIMIT для захвата подмножеств результирующего набора. LIMIT 10 говорит строки от 1 до 10. LIMIT 11,20 говорит строки от 11 до 20 и так далее. Строка 1 соответствует порядку строки в результирующем наборе, так как строки в таблицах больше похожи на "облако", порядок не создается до тех пор, пока вы не создадите результирующий набор с предложением ORDER BY.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню