Я огляделся, и единственные вопросы/ответы, которые я могу найти на сайте, связаны с сортировкой по ID в MySQL. Такие вопросы, как: qaru.site/questions/563898/... и qaru.site/questions/563901/...
Вместо этого я ищу, чтобы найти предыдущую и следующую строки при сортировке другим столбцом, отличным от ID. Например:
Сначала я запускаю этот запрос, чтобы получить список пользователей:
SELECT id, first_name, last_name
FROM user
WHERE last_name LIKE 'm%'
AND active_flag = 1
ORDER BY last_name, first_name
Теперь пользователь нажимает на один из результатов и отправляется на страницу подробных сведений для этого пользователя. На этой странице я хочу отобразить предыдущие и следующие ссылки.
Одна из моих идей заключалась в том, чтобы сделать один и тот же запрос, но ограничить его для 3 строк, 1 до, текущего и после, но потом я понял, что не знаю, где в списке результатов текущий пользователь.
Любые другие идеи, кроме выбора всего набора результатов, получение ключа массива, а затем поиск предыдущего и следующего?
Я использую MySQL и PHP.
Операторы "меньше" и "больше" работают также с строковыми полями. Получить текущую запись. Затем выполните:
SELECT id, first_name, last_name
FROM user
WHERE last_name >= $current_lastname
AND first_name > $current_firstname
AND active_flag = 1
ORDER BY last_name, first_name
Этот запрос должен быть быстрым, если у вас есть кластерный индекс на (last_name, first_name)
. Конечно, нет никаких гарантий при использовании MySQL, поэтому вам нужно запустить EXPLAIN
в запросе, чтобы убедиться.