Быстрый вопрос. У меня есть таблица сообщений, каждая с меткой времени и 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 = ?
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.
id
auto_increment.