Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: "Zapętlona suma"
Forum PHP.pl > Forum > Bazy danych > MySQL
Swiezu
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.
Sephirus
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
Swiezu
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.
mmmmmmm
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).
mar1aczi
@Swiezu - możesz podać zrzuty tabel z danymi (w formie pliku do zaimportowania)? Będzie łatwiej testować smile.gif
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.