Wyciągam liczbę wszystkich elementów:
Wyciągam 10 pierwszych wyników. Zamiast wyciągnąć dane to wyciąga tylko PK:
SELECT COUNT(*) AS `num_results` FROM (SELECT `v`.`idvideo` FROM `video` `v` LEFT JOIN `user` `u` ON `v`.`iduser` = `u`.`iduser` LEFT JOIN `message` `m` ON `v`.`idvideo` = `m`.`idvideo` GROUP BY `v`.`idvideo`, `m`.`idvideo`) `dctrn_count_query`
Dopiero teraz wyciąga wszystkie dane na podstawie PK podając je w klauzuli WHERE:
SELECT DISTINCT `v2`.`idvideo` FROM `video` `v2` LEFT JOIN `user` `u2` ON `v2`.`iduser` = `u2`.`iduser` LEFT JOIN `message` `m2` ON `v2`.`idvideo` = `m2`.`idvideo` GROUP BY `v2`.`idvideo`, `m2`.`idvideo` ORDER BY `v2`.`idvideo` DESC LIMIT 10
SELECT `v`.`idvideo` AS `v__idvideo`, `v`.`title` AS `v__title`, `u`.`iduser` AS `u__iduser`, `u`.`login` AS `u__login`, `m`.`idmessage` AS `m__idmessage`, COUNT(`m`.`idmessage`) AS `m__0`, IF(SUM(`m`.`iscorrect`) IS NULL, 0, SUM(`m`.`iscorrect`)) AS `m__1` FROM `video` `v` LEFT JOIN `user` `u` ON `v`.`iduser` = `u`.`iduser` LEFT JOIN `message` `m` ON `v`.`idvideo` = `m`.`idvideo` WHERE `v`.`idvideo` IN ('68', '67', '66', '65', '64', '63', '61', '60', '59', '58') GROUP BY `v`.`idvideo`, `m`.`idvideo` ORDER BY `v`.`idvideo` DESC NULL