Счас выдам тебе крокодила, оптимизи сам.
Таблица message: id, mdata, mtext Таблица comment: id, message_id, cdata, ctext Запрос 1 (q1)
| Код | SELECT c1.* FROM comment AS c1 INNER JOIN comment AS c2 ON c1.message_id = c2.message_id WHERE c1.cdata<=c2.cdata
|
Запрос 2 (q2)
| Код | SELECT q1.message_id, q1.cdata, q1.ctext FROM q1 GROUP BY q1.message_id, q1.cdata, q1.ctext HAVING Count(q1.message_id)<=10
|
Запрос 3 (q3)
| Код | SELECT message.id, message.mdata, message.mtext FROM message ORDER BY message.mdata DESC LIMIT 10
|
Запрос 4 (q4)
| Код | SELECT q3.id as id, q3.mdata as msdata, q3.mtext as mstext FROM q3 UNION ALL SELECT q2.message_id, q2.cdata, q2.ctext FROM q2
|
Запрос 5 (q5)
| Код | SELECT q4.id, q4.msdata, q4.mstext FROM q4 ORDER BY q4.id, q4.msdata
|
Всё в кучу
| Код | SELECT q4.id, q4.msdata, q4.mstext FROM ( SELECT q3.id as id, q3.mdata as msdata, q3.mtext as mstext FROM ( SELECT message.id, message.mdata, message.mtext FROM message ORDER BY message.mdata DESC LIMIT 10 ) as q3 UNION ALL SELECT q2.message_id, q2.cdata, q2.ctext FROM ( SELECT q1.message_id, q1.cdata, q1.ctext FROM ( SELECT c1.* FROM comment AS c1 INNER JOIN comment AS c2 ON c1.message_id = c2.message_id WHERE c1.cdata<=c2.cdata ) as q1 GROUP BY q1.message_id, q1.cdata, q1.ctext HAVING Count(q1.message_id)<=10 ) as q2 ) as q4 ORDER BY q4.id, q4.msdata;
|
Последний запрос проверил на реальных данных. Работает. |