【问题标题】:how to get mysql ranking among results with same id如何在具有相同ID的结果中获得mysql排名
【发布时间】:2010-09-25 19:31:53
【问题描述】:

快速提问,我有一个消息表,每条消息都有一个时间戳、一个reply_id 和一个topic_id。 Reply_ids 可以与其他消息相同,这意味着这些消息在同一组回复中。当我选择一个带有最小时间戳的 reply_id 时,这意味着它是该组的第一条消息,我还想知道它在该 topic_id 的所有结果中的编号位置,例如。 3rd (3) 4th(4) 等等。有人知道怎么做或者有什么建议吗?这可以在纯sql中完成吗?

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

【问题讨论】:

    标签: sql mysql ranking rank


    【解决方案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 不支持的分析函数将是更好的选择。您可以使用 MySQL SELECT 语句中的变量重新创建功能。

    【讨论】:

    • reply_id 不是唯一的,但我确实有一个名为 id 的自动增量列可以使用,我会试试这个并告诉你,谢谢小马
    • @Scarface:根据有关 auto_increment id 专栏的消息进行了更新。
    • 似乎工作谢谢,非常感谢您的帮助小马,感谢您的时间
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2019-10-29
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多