Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL][PHP] Trochę bardziej skomplikowane zapytanie
Forum PHP.pl > Forum > Przedszkole
MateuszRyaN
Witam wszystkich. Od 2 dni próbuje uporać się z pewnym zapytaniem, niestety bez żadnych pozytywnych rezultatów. Może tutaj mi ktoś pomoże.
Mam skrypt rejestracji/autoryzacji/logowania i wszystko hula...docelowo napisałem skrypt który przy rejestracji dodaje "polecającego".
Działa to na zasadzie typu: id mojego użytkownika to 69...ślę do drugiej osoby linka register.php?id_c=69 (dane wędrują do cookie itp itp - mniejsza o to) i nowo zarejestrowana osoba (o id np. 75) ma na końcu w tabeli id polecającego...czyli to 69.

Więc załóżmy, że tabela wygląda np. w taki sposób:

Kod
|| id || login || pass || email || id_polecajacego ||
___________________________________________
69 , romek , 1234 , bla@wp.pl , (puste...bo zalogował się sam...bez reflinka czli nie ma osoby polecającej)
70 , endriu , sdj23, ufo@o2.pl , 69
71 , marek , zaq1 , zaq@o2.pl , 69
72 , arq , asd , asd@o2.pl , 71


Czyli: użytkownik o id 69...rozesłał swojego linka do x osob, które sie zarejestrowały i mają jego id....
I tu teraz ta masakra.... jak stworzyć zapytanie, które będzie zwracało wynik w postaci "ala rankingu" - które by zliczało ile jest najwięcej id_polecających o tej samej wartości i podawało sumę...i przypisywało ich konkretnego właściciela:

1 MIEJSCE W RANKINGU: romek -> który zaprosił aż..2 osoby...
2 MIEJSCE W RANKINGU: marek -> który zaprosił 1 osobe...

Prosze o pomoc...już tyle sie przy całym skrypcie natrudziłem, a z tym nie jestem w stanie sobie poradzić.
sadistic_son
  1. $sql="SELECT id, login FROM tabela";
  2. $result=mysql_query($sql);
  3. while($row=mysql_fetch_array($result,MYSQL_NUM)){
  4. $ilosc=mysql_result(mysql_query("SELECT COUNT(id) FROM tabela WHERE id_polecajacego = ".$row[0]),0);
  5. echo "Login:$row[1] polecil $ilosc uzytkownikom<br />";
  6. }
Aby posortowac to sobie wg. ilosci polecen zrob z $ilosc tablice i posortuj ja malejaco wg. wartosci.
#luq
Tak sadistic_son 5001 zapytań przy 5000 userów to super rozwiązanie...

Tak chyba powinno być okej:
  1. SELECT
  2. login, COUNT( id_polecajacego ) AS cnt
  3. FROM
  4. TABLE
  5. WHERE
  6. id_polecajacego = id
  7. GROUP BY
  8. id
MateuszRyaN
A jakby w takiej sytuacji wyglądała struktura tablicy??
djakdawid
tablica bez zmian. #luq zaproponował po prostu optymalniejsze zapytanie.
sadistic_son
Wszystko pięknie luq tylko 2 sprawy: 1) Twoje zapytanie działa tylko dla 1 użytkownika. 2) Twoja zapytanie nie działa tak jak należy, bo nie pokazuje żądanych ilości.
Ale rację przyznaję... jest optymalniejsze smile.gif
#luq
Cytat
Ale rację przyznaję... jest optymalniejsze

winksmiley.jpg

Hm... być może nie działa, po napisaniu tego posta zastanawiałem się nad idotyzmem warunku który napisałem... winksmiley.jpg Na pewno da się to (i należy) zrobić jednym zapytaniem, niestety nie mam czasu na tworzenie sobie takiej tabelki i zapytania po te dane.
MateuszRyaN
Koledzy...spróbowałem jeszcze nieco inaczej i hula smile.gif)

  1.  
  2. <?php
  3. include 'dbc.php';
  4. $wynik=mysql_query("SELECT id AS idik, full_name, (SELECT count(id) FROM `users` WHERE id_c = idik) AS liczby FROM `users` ORDER BY liczby DESC");
  5. if(mysql_num_rows($wynik) > 0) {
  6.  
  7. echo "<table cellpadding=\"2\" border=1>";
  8. while($r = mysql_fetch_array($wynik)) {
  9. echo "<tr>";
  10. echo "<td>".$r[1]."</td>";
  11. echo "<td>".$r[2]."</td>";
  12. echo "</tr>";
  13. }
  14. echo "</table>";
  15. }
  16.  
  17. ?>
  18.  


Ale dzięki za pomoc smile.gif Temat do zamknięcia.
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.