Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Rozbudowane zapytanie sql z left join
Forum PHP.pl > Forum > Przedszkole
mlody69
Witam,
próbuję napisać zapytanie, które policzy ilość wejść czyli rekordów z tabeli sessions dla usera o jakimś ID oraz ilość subskrybcji z tabeli subs i kwote zarobioną lacznie na podstawie kolumnny cash z tabeli subs dla okreslonej daty oraz dodatkowo zeby zwrocilo nazwę kampanii z tabeli campaigns.name.
Struktura tabel: http://puu.sh/4VT2A.png

Moje aktyualne zapytanie
  1. $query = "select f.*,(select count(1) from `subs` where `uid`=f.id) as subskrypcje,(select sum(`cash`) from `subs` where `uid`=f.id) as earnings from `users` f where f.id='".user_id()."' AND (`date` > '".$datestart."' AND `date` < '".$dateend."')";

Będe wdzieczny za pomoc gdyż zależy mi na czasie.

Pozdrawiam.
mmmmmmm
  1. SELECT f.*, s.subskrypcje, s.earnings FROM users f LEFT JOIN (SELECT uid, Count(*) subskrypcje, sum(cash) earnings FORM subs GROUP BY 1) s ON s.uid=f.id WHERE ...
mlody69
Witam,
Dziękuję za odpowiedź aczkolwiek to zapytanie nie zwraca nic mimo że w tabeli sessions są rekord.
nospor
Rozpisz se to normalnie na dwa zapytania, kazde oddzielnie na to co chcesz i juz.
Od biedy polacz to potem przez UNION jesli chcesz wykonac tylko jedno zapytanie do bazy
mmmmmmm
Cytat(mlody69 @ 22.10.2013, 10:58:24 ) *
Witam,
Dziękuję za odpowiedź aczkolwiek to zapytanie nie zwraca nic mimo że w tabeli sessions są rekord.

Pokaż kod.
mlody69
  1. $query = "SELECT f.*, s.subskrypcje, s.earnings FROM users f LEFT JOIN (SELECT uid, Count(*) subskrypcje, sum(cash) earnings FROM subs GROUP BY 1) s ON s.uid=f.id where f.id='".user_id()."' AND (`date` > '".$datestart."' AND `date` < '".$dateend."')";
  2. $query = $db->query($query);
  3. $row = $db->fetchAssoc($query);
  4. print_r($row);


Jakieś pomysły?

Zastanawiam się dlaczego
zapytanie
  1. SELECT f.*,(SELECT count(1) FROM `subs` WHERE `uid`=f.id) AS subskrypcje,(SELECT sum(`cash`) FROM `subs` WHERE `uid`=f.id) AS earnings FROM `users` f WHERE f.id='".user_id()."' ORDER BY `date` DESC;

Zwraca tabelę z informacjami o userze oraz subskrybjce i zarobki a gdy dodam
  1. SELECT f.*,(SELECT count(1) FROM `subs` WHERE `uid`=f.id) AS subskrypcje,(SELECT sum(`cash`) FROM `subs` WHERE `uid`=f.id) AS earnings FROM `users` f WHERE f.id='".user_id()."' AND (`date` > '".$startdate."' AND `date` < '".$enddate."') ORDER BY `date` DESC;

to juz nie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.