как получить MySQL рейтинг среди результатов с тем же идентификатором

0

Быстрый вопрос. У меня есть таблица сообщений, каждая с меткой времени и reply_id и topic_id. Reply_ids могут быть такими же, как и другие, что означает, что эти сообщения находятся в одной группе ответов. Когда я выбираю reply_id с меткой времени min, то есть это первое сообщение этой группы, я также хотел бы знать ее пронумерованное место во всех результатах этого topic_id, например. 3-й (3) 4-й (4) и т.д. Кто-нибудь знает, как это сделать или есть предложения? Можно ли это сделать в чистом sql?

SELECT reply_id,min(timestamp) as min FROM messages
   WHERE reply_chunk_id = ?
     AND topic_id = ?
Теги:
rank
ranking

1 ответ

1
Лучший ответ

Использование чистого SQL:

SELECT m.reply_id,
       MIN(m.timestamp) as min,
       (SELECT COUNT(*)
          FROM MESSAGES t
         WHERE t.id <= m.id) AS rank
  FROM MESSAGES m
 WHERE m.reply_chunk_id = ?
  AND m.topic_id = ?

Это работает, только если replyid - это уникальные значения. Если перед replyid есть дубликат replyid, тогда COUNT пропустит это.

Аналитические функции, которые MySQL не поддерживает, были бы лучшим вариантом. Вы можете воссоздать функциональность с помощью переменных в операторах SELECT MySQL.

  • 0
    response_id не уникален, но у меня есть автоинкрементный столбец с именем id, который можно использовать, я попробую это и сообщу, спасибо пони
  • 0
    @Scarface: обновлено в свете новостей о столбце id auto_increment.
Показать ещё 1 комментарий

Ещё вопросы

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