Как получить количество записей перед определенной записью в mysql с сортировкой по полю varchar?
Имею таблицу откуда беру запросом данные, и при определенных действиях, мне надо сделать подсчет количества записей перед определенной записью.
Но обязательно с сортировкой по полю varchar asc.
Сейчас я сделал так что в цикле прохожу по всем записям через limit и offset в php, пока это работает и быстро когда количество записей не особо много, а когда будет 100 тыс или больше, то, думаю этот процесс займет долгое время.
Есть ли возможность сделать это запросом в mysql?
upd:
К чему такая логика, есть таблица с данными, откуда я вывожу данные, т.к. там записей немало а более 20 тыс, я вывожу частями и при скроле дорисовываю таблицу отображения с данными через limit и offset. Есть логика редактирования записи, т.е. пользователь выбрал запись и нажал редактировать. После внесения изменении, мне нужно вернуть пользователя на ту позицию где он был с выбранным через css active элемент в tr. Есть также логика добавления нового элемента через форму, после добавления также, мне нужно в таблице отображения показать этот элемент в видимой области и сделать его active через css.
Все это я сделал и работает корректно, но, как и писал выше, прохожу в цикле по всем элементам и делаю подсчет. После нахождения элемента в массиве, я возвращаю в js что элемент на такой странице и гружу эту страницу, далее при скроле вверх или вниз я загружаю предыдущие или последующие страницы.
rPman, вооот, поэтому я и гружу страницами, т.е. в видимой области максимум 5 страниц по 100, 500 элементов, что выше прошли, они удаляются и в js объекте ставлю метку какие страницы были удалены, чтобы если скролить обратно вверх, то, загружать обратно.
mr.bob, если я правильно понял проблему, то сортировку всегда делать по поле, id и условие соответственно делать
SELECT count(*)+1 FROM players WHERE score > ? OR (score = ? AND id < ?)
в общем как написано тут https://phpdelusions.net/articles/rank_based_on_sc...
Если нужно на следующей странице показать элемент, который был выбран, то сохраняй его id, всего делов то? хоть в сессии, хоть в отдельной таблице.
есть хорошее правило, постарайся, все что касается только интерфейса и поведения пользователя в сессии, хранить у пользователя, зачем это на сервер тащить?
так сортировка не по id
ему надо нужную страницу найти.
скажем, запись при сортировке по названию будет 55 по счету.
при выводе по 10 записей на страницу это будет 6-я.
id тут запоминай-не запоминай, но номер страницы это никак не поможет получить
тебе нужна нумерация, сохраненная в таблице, каждый раз когда порядок должен измениться, обновляй соответствующее поле с номером функция row_number, и дальше имея на руках id 'текущей записи' всегда можно получить ее позицию в списке