[MySQL] Быстро узнать порядковый номер данной строки среди удовлетворя
Ап... неужели никто не знает, как это сделать?
В форумах, например - как определяется, что какой-то пост находится на конкретной странице треда?
В форумах, например - как определяется, что какой-то пост находится на конкретной странице треда?
> В форумах, например - как определяется, что какой-то пост находится на конкретной странице треда?
Обычно через задницу.
зы
можно, например, заметить, что в этом форуме - это работает неправильно.
Обычно через задницу.
зы
можно, например, заметить, что в этом форуме - это работает неправильно.
А самому посмотреть исходники форума?
Долго и нудно разбираться, непонятно даже, где искать...
В нашем форуме это вроде бы делается относительно нормально?
Так неужели никак не сделать это, не меняя существующей структуры данных, кроме как SELECT * WHERE xxx считать ещё одной таблицей, прикручивать к нему свои id и смотреть уже в этой новой таблице номер нужной строки?
В нашем форуме это вроде бы делается относительно нормально?
Так неужели никак не сделать это, не меняя существующей структуры данных, кроме как SELECT * WHERE xxx считать ещё одной таблицей, прикручивать к нему свои id и смотреть уже в этой новой таблице номер нужной строки?
Зачем его определять? Можно выводить сообщения через запрос:
select * from `posts` by order date asc limit ($page_number-1)*($post_per_page$page_number)*($post_per_page);
средствами SQL без использования вложенных запросов этого сделать нельзя.
В форуме AFAIK сначала вытягиваются все пары ключ-значение, и уже по ним скриптом выбирается что показывать.
говорят это получается даже быстрее LIMIT.
В форуме AFAIK сначала вытягиваются все пары ключ-значение, и уже по ним скриптом выбирается что показывать.
говорят это получается даже быстрее LIMIT.
а как узнать номер страницы, если я например хочу вывести конкретную страницу, на которую попала запись?
Особенно если у тебя помножено несколько таблиц и сделан сложный сорт.
Особенно если у тебя помножено несколько таблиц и сделан сложный сорт.
хз. Так сразу не могу ответить ... возможно придется клепать еще одну таблицу в которой будет храниться необходимая информация для получения результата.
Спасибо, про LIMIT я в курсе.
Если ты не заметил - тут речь о противоположно задаче - надо узнать не какие записи попадают на данную страницу, а на какую страницу попадает данная запись.
Если ты не заметил - тут речь о противоположно задаче - надо узнать не какие записи попадают на данную страницу, а на какую страницу попадает данная запись.
Собственно, про это и был вопрос... можно это сделать за один селект, или надо считать результат новой таблицей и вводить ID на нём...
Похоже, легче поменять структуру данных...
Похоже, легче поменять структуру данных...
Если ты знаешь Id поста, а ещё знаешь, что Id монотонно возрастает (то есть все посты старше данного гарантированно имеют меньший Id) то на MSSQL номер поста в треде забирается так:
SELECT COUNT(*) FROM Posts WHERE Posts.Id < @TargetId AND (проверка на принадлежность данной странице)
SELECT COUNT(*) FROM Posts WHERE Posts.Id < @TargetId AND (проверка на принадлежность данной странице)
О, спасибо!
Всё гениальное просто...
Всё гениальное просто...

проблемы начнутся, если порядок вывода строк (сортировка) не будет совпадать с возрастанием ID... 

А он по умолчанию не по возрастанию ИД?
Кроме тогоь, разве не получится к тому запросу добавить SORT BY id?
Кроме тогоь, разве не получится к тому запросу добавить SORT BY id?
SELECT COUNT(*) FROM posts WHERE thread=123 AND id<456 ORDER BY id ASC;
?
?
тебе из надо в этом порядке выводить?
тогда все ок.
тогда все ок.
кста, глупый вопрос: а хранимых процедур там нету? 

Я не настолько разбираюсь в mysql, чтобы знать, что такое "ранимые процедуры" 
Честно говоря, я впервые стал с ним работать пару недель назад


Честно говоря, я впервые стал с ним работать пару недель назад

есть подозрение, что это делается одним селектом - а как?делается. Уже написали?
Да - в предыдущих постах
Оставить комментарий
kruzer25
Есть таблица, в ней куча строк... надо узнать, какой порядковый номер будет у строки с данным ID в под-таблице всех строк, удовлетворяющих данному условию... есть подозрение, что это делается одним селектом - а как?