Я не могу понять, как выбрать предыдущую/следующую строку, если текущая строка не имеет числовых идентификаторов.
С числовым значением я всегда использую 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" из БД. Как?:)
я бы выбрал предыдущий с...
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.
Строки не имеют порядка, mysql сохраняет строки в любом порядке. Его называют кластеризацией. Вы используете LIMIT для захвата подмножеств результирующего набора. LIMIT 10 говорит строки от 1 до 10. LIMIT 11,20 говорит строки от 11 до 20 и так далее. Строка 1 соответствует порядку строки в результирующем наборе, так как строки в таблицах больше похожи на "облако", порядок не создается до тех пор, пока вы не создадите результирующий набор с предложением ORDER BY.