Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> "Zapętlona suma"
Swiezu
post 11.02.2013, 09:59:38
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 11.02.2013

Ostrzeżenie: (0%)
-----


Witam smile.gif

Szukam pomocy bo już żadnego pomysłu nie mam, a w internecie nic nie znalazłem.

Do rzeczy

Tabela user:
id(k) | date | ref

Tabela download
id | user_id(k) | cash | date

kolumna ref definiuje przez jakiego usera sie zarejestrowal ten kolejny, czyli np. wpis
User: 12 | 2012-12-12 | 7 - definiuje ze 12.12.2012 dolaczyl uzytkownik z polecenia uzytkownika o id 7

download to pobrania danego uzytkownika download.user_id = user.id (oznaczylem jako k, zeby bylo latwiej).
teraz moj problem

musze wybrac w danej dacie najwiekszy zarobek 10 userow, czyli:
  1. SELECT u.id, (SELECT SUM(cash) FROM download WHERE user_id = u.id AND date LIKE(2012-12%)) AS allearn FROM user u ORDER BY allearn DESC LIMIT 10


problem w tym ze ja potrzebuje SUM(cash) powiekszony o zarobki uzytkownikow, ktorzy maja u.id w polu ref ... da się to w ogóle zrobić?
Mam nadzieję, że dobrze wytłumaczyłem o co chodzi.

Krótko mówiąc potrzebuję 10-ciu najbardziej zarabiających użytkowników w danym czasie uwzględniając zarobki użytkowników przez nich poleconych.
Go to the top of the page
+Quote Post
Sephirus
post 11.02.2013, 10:53:20
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Spróbuj:

  1. SELECT u.id, SUM(d.cash) AS suma
  2. FROM user AS u
  3. JOIN user AS r ON u.ref = r.id
  4. JOIN download d ON (d.id_user = u.id OR d.id_user = r.id) AND d.date LIKE '2012-12%'
  5. GROUP BY u.id ORDER BY suma DESC LIMIT 10


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Swiezu
post 13.02.2013, 23:42:57
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 11.02.2013

Ostrzeżenie: (0%)
-----


Niestety nie działa. Jeszcze jedno doszło. Suma z dodatkowych użytkowników (tych z ref) musi być pomnożona przez 0.1. Ma ktoś jakiś pomysł? Lub gdzie tego szukać? Zależy mi żeby było to jedno zapytanie.
Go to the top of the page
+Quote Post
mmmmmmm
post 14.02.2013, 06:59:09
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Rekurencja niezbyt dobrze działa w bazach danych. Powinieneś przy użytkowniku (w tabeli user) mieć dodatkowe pole z interesującą cię liczbą. Dodatkowo przy każdym INSERT (ew. UPDATE jak podołasz) na tabeli download powinieneś wartość tego pola zmieniać TRIGGEREM (i wszystkich powyżej) - w TRIGGERACH możesz użyć pętli (chyba).
Go to the top of the page
+Quote Post
mar1aczi
post 14.02.2013, 12:58:20
Post #5





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


@Swiezu - możesz podać zrzuty tabel z danymi (w formie pliku do zaimportowania)? Będzie łatwiej testować smile.gif


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:17