Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyciągnie danych z mysql przez pętlę.
Forum PHP.pl > Forum > Przedszkole
Klycior
Cześć,

Mam stronkę na której każdy użytkownik ma swój link refrakcyjny który rozsyła znajomym i nabija mu się licznik odwiedzin.Działa to tak: Jeżeli ktoś wejdzie w jego link do to bazy ref dodaje się IP odwiedzającego oraz ID zapraszającego czyli coś takiego:



Każdy użytkownik może sprawdzić ile osób weszło w jego link a o to system sprawdzający:

  1. $id = mysql_fetch_row(mysql_query("SELECT id FROM users WHERE login='$login'"));
  2. $ile = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM ref WHERE id_user='".$id[0]."'"));
  3. echo '<h1><center>Zaprosiłeś '; echo $ile[0]; echo ' osoby/osób.</h1></center>';
  4. echo '<h2><center>Twój link to: <br><br><a href=http://nefix.pl/zaproszenie.php?ref=';
  5. echo "$id[0]";
  6. echo '><font color=red>http://nefix.pl/zaproszenie.php?ref=';
  7. echo "$id[0]";
  8. echo "</font></a></h2></center>";


Chciałbym zrobić dla siebie listę kto ma najwięcej zaproszonych po to aby wynagrodzić osobę u której weszło najwięcej osób w link.Na liście wystarczy ilość zaproszonych oraz nick użytkownika.

Pomoże ktoś ?
Fifi209
  1. $id = mysql_fetch_row(mysql_query("SELECT id FROM users WHERE login='$login'"));
  2. $ile = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM ref WHERE id_user='".$id[0]."'"));


To można zapisać mniej więcej tak:
  1. SELECT COUNT(`id`) FROM `ref` WHERE `id_user` = (SELECT `id` FROM `users` WHERE `login` = "'.$login.'" LIMIT 1)



A to co Ty chcesz zrobić:
  1. SELECT `users`.`login`, count(`ref`.`id`) AS `zaproszen` FROM `ref`
  2. LEFT JOIN `users` ON(`ref`.`id_user` = `users`.`id`)
  3. ORDER BY `zaproszen` DESC


Chyba tak haha.gif
Klycior
No dobrze ale jak teraz tego użyć ?

Wybaczcie ale dopiero co poznaję język PHP.
Fifi209
  1.  
  2. $sql = 'zapytanie które dałem';
  3.  
  4. $select = mysql_query($sql);
  5.  
  6. while($data = mysql_fetch_assoc($select)) {
  7. echo 'Uzyszkodnik: '.$data['login'].' ma '.$data['zaproszen'].' zaproszen';
  8. }
Klycior
Wiem że to może być śmieszne co napiszę ale nie potrafię zrobić zapytania z tego ponieważ zwraca mi błąd.
Nigdy nie operowałem na takich długich zapytaniach.

Będę bardzo wdzięczny jeżeli wrzucisz mi gotowca.
Van Pytel
A jaki blad? Napisz dokladnie co Ci pisze.
Wtedy mozna wiecej powiedziec co jest zle
Fifi209
Cytat(Van Pytel @ 5.06.2010, 11:34:05 ) *
A jaki blad? Napisz dokladnie co Ci pisze.
Wtedy mozna wiecej powiedziec co jest zle


To co kolega napisał to raz.

Dwa pokaż jak jest zbudowana baza danych dla tych dwóch tabel.
Klycior



Mógł by mi ktoś stworzyć takie zapytanie które ja powinienem zrobić ale nie umiem ?

I chciałbym również podziękować wam za chęci smile.gif
thek
Po pierwsze: Zapytanie jest proste. Jeśli nie masz pomysłu na to jak napisać je to trudniejsze będą dla Ciebie nie do napisania. W takim wypadku radzę albo zacząć się do tego przykładać jak należy, albo dać sobie spokój z programowaniem jakimkolwiek. Przerośnie Cię to inaczej.
Po drugie: zrzucam na karb niedoświadczenia, ale IP przechowuje się w bazie nie jako varchar tylko int (po użyciu jednej funkcji konwertującej).
Po trzecie: Fifi już Ci podpowiada, ale jego zapytanie można prościej rozwiązać grupowaniem i liczeniem tam. Wtedy poda jak na tacy nie dla jednego usera, tyko wszystkich smile.gif
Fifi209
Cytat(thek @ 5.06.2010, 13:29:49 ) *
Po trzecie: Fifi już Ci podpowiada, ale jego zapytanie można prościej rozwiązać grupowaniem i liczeniem tam. Wtedy poda jak na tacy nie dla jednego usera, tyko wszystkich smile.gif


Hmm, a to które napisałem
  1. SELECT `users`.`login`, count(`ref`.`id`) AS `zaproszen` FROM `ref`
  2. LEFT JOIN `users` ON(`ref`.`id_user` = `users`.`id`)
  3. ORDER BY `zaproszen` DESC


Funkcja o której mowa ip2long - może Cię to naprowadzi.
Klycior
Wyjechałem na weekend więc nie mogłem odpisać.

Jak wielu z was zauważyła temat napisałem w dziale "Przedszkole" czyli początki to wydaje mi się że teksty typu "Jak takich podstaw nie wiesz to się nie bierze za programowanie" nie są na miejscu bo naprawdę mi zależy a jeżeli ktoś już ma coś przeciwko to może zachować to dla siebie.

Mogę zapłacić jeżeli ktoś mi pomoże zrobić to o co prosiłem.
Nie potrafię stworzyć zapytania które dostałem od fifi209 któremu bardzo dziękuję za pomoc.
thek
Napiszę to zapytanie w sposób "ludzki"... Weź policz wszystkie adresy IP pogrupowane według id_użytkownika. Jeśli chcesz możesz jeszcze dołączyć tabelę użytkowników i pobrać z niej nazwę użytkownika.
Tak więc całość zapytania to:
  1. SELECT u.nazwa_usera, count(adres_ip) AS ile FROM referencyjne AS r LEFT JOIN users AS u ON r.id_usera = u.id GROUP BY r.id_usera
czy coś w ten deseń... Można jeszcze jedynie kombinować z tabelą referencyjnych linków, by usunąć ewentualne zdublowane I.Ale to już zostawiam na Twoje przemyślenie. Zapytanie Fifiego wygeneruje wyniki, ale niech on sam zobaczy, czy ten count zadziała tak jak powinien.
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.