как получить MySQL рейтинг среди результатов с тем же идентификатором - PullRequest
0 голосов
/ 25 сентября 2010

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

SELECT reply_id,min(timestamp) as min FROM messages
   WHERE reply_chunk_id = ?
     AND topic_id = ?

1 Ответ

1 голос
/ 25 сентября 2010

Использование чистого 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, были бы лучшим вариантом. Вы можете воссоздать функциональность, используя переменные в операторах MySQL SELECT.

...