mam takie oto zapytanie MySQL:
Kod
SELECT `u`.*,
(
SELECT count(*)
FROM `payments` AS `p`
WHERE `p`.`user_id` = `u`.`id`
) AS `payments_count`,
(
SELECT coalesce(sum(`amount`), 0)
FROM `payments` AS `p`
WHERE `p`.`user_id` = `u`.`id`
) AS `payments_total`,
(
SELECT count(*)
FROM `orders` AS `o`
WHERE `o`.`user_id` = `u`.`id`
) AS `orders_count`,
(
SELECT coalesce(sum(`price`), 0)
FROM `orders` AS `o`
WHERE `o`.`user_id` = `u`.`id`
) AS `orders_total`
FROM `users` AS `u`
ORDER BY `u`.`register_date` DESC
(
SELECT count(*)
FROM `payments` AS `p`
WHERE `p`.`user_id` = `u`.`id`
) AS `payments_count`,
(
SELECT coalesce(sum(`amount`), 0)
FROM `payments` AS `p`
WHERE `p`.`user_id` = `u`.`id`
) AS `payments_total`,
(
SELECT count(*)
FROM `orders` AS `o`
WHERE `o`.`user_id` = `u`.`id`
) AS `orders_count`,
(
SELECT coalesce(sum(`price`), 0)
FROM `orders` AS `o`
WHERE `o`.`user_id` = `u`.`id`
) AS `orders_total`
FROM `users` AS `u`
ORDER BY `u`.`register_date` DESC
Wygląda na skomplikowane, ale to po prostu wybieranie wszystkich rekordów z tabeli `users` i statystyk z połączonych dwóch innych tabel - `payments` i `orders`. Jak można to uprościć/zoptymalizować, żeby nie wyszukiwać po dwa razy z każdej z dołączonych tabel?
Mile widziana podpowiedź z JOIN-ami, bo używam ORM-a i może być problem z podzapytaniami, chociaż nie dam sobie nic uciąć.

P.S. Co jest z tym kolorowaniem składni? Wrzucam jako code, bo kolorowanie MySQL jakieś hieroglify mi wyrzuca.