о, это сводит меня с ума.У меня есть таблица сообщений, упрощенный пример:
id[int] - sender[int] - receiver[int] - conv_id[bigint] - received[int] - stamp[int]
1 2 1 5 1 timestamp+1
2 2 1 5 1 timestamp+2
3 3 1 6 1 timestamp+3
4 4 1 7 1 timestamp+4
5 5 1 8 1 timestamp+5
6 5 1 8 1 timestamp+6
Теперь мне интересны результаты, сгруппированные по получателям, ограничены 3 отправителями и отсортированы по штампу DESC.Как это сделать?
У меня уже есть это, но оно принимает все сообщения, и я считаю, что это не лучший способ не потерять производительность, хотя я действительно не гуру mysql:
SELECT id, sender, receiver, conv_id FROM
(SELECT m.id, m.sender, m.receiver,m.conv_id
FROM messages AS m WHERE m.receiver = 1 AND m.received = 1
ORDER BY m.stamp DESC) as messages_tmp
WHERE receiver = 1 GROUP BY conv_id ORDER BY NULL LIMIT 0,3
Это должно вернуть эти результаты в следующем порядке:
id = 6, id = 4, id = 3
Дело в том, что я уже делаю с запросами этого, для m.received = 0
, а затем, если результатов недостаточно, дляm.received = 1
.Пока моя база данных не слишком большая, но если она станет больше, я боюсь, что это может быть медленным.Я думаю о возможности ограничить результаты подзапроса, но не знаю, как это сделать, и буду уверен, что после GROUP получу достаточно результатов.Спасибо.