Какой самый быстрый способ найти предыдущую и следующую запись в результате, не отсортированном по ID в MySQL?

0

Я огляделся, и единственные вопросы/ответы, которые я могу найти на сайте, связаны с сортировкой по 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.

Теги:

1 ответ

1

Операторы "меньше" и "больше" работают также с строковыми полями. Получить текущую запись. Затем выполните:

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 в запросе, чтобы убедиться.

Ещё вопросы

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