Выбор предыдущей и следующей строк в MySQL - как? - PullRequest
0 голосов
/ 25 августа 2010

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

С числовым значением я всегда использую 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». Когда я запрашиваю БД и сортирую по этому столбцу, я получаю:

Ab
Bb
Cc
Dd
Ee

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

Ответы [ 2 ]

1 голос
/ 25 августа 2010

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

0 голосов
/ 25 августа 2010

Я бы выбрал предыдущий с помощью ...

  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, как предложено полковником Шрапнелем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...