Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciąganie rekordow z bazy - problem
Forum PHP.pl > Forum > Bazy danych > MySQL
djiras1
Witam,
robie malutki serwis z fotkami i na stronie glownej bedzie wyswietlało mi 7 najnowszych i najlepszych userow wraz z ich miniaturka fotki.. no i teraz.. najnowszych zrobilem ale z najlepszymi nie moge sobie dac rady.. nick wyswietla ale miniaturki nie moge wyseitlic, a raczej przyporzadkowac userowi.. oto jak wygladaja kody:


Kod
$zapytanie = "SELECT id,login FROM users";
$wynik = mysql_query($zapytanie);
$i = 1;
while ($uzytkownicy = mysql_fetch_array($wynik)) {
    $zapytanie = "SELECT ocena FROM oceny WHERE para=$uzytkownicy[id]";
    $wynik2 = mysql_query($zapytanie);
    $ile_ocen = mysql_num_rows($wynik2);
    while ($oceny = mysql_fetch_array($wynik2)) {
        $suma_ocen += $oceny[ocena];
    }
    $najlepsi[1][$i] = $uzytkownicy[id];
    $najlepsi[2][$i] = $uzytkownicy[login];
    $najlepsi[3][$i] = $ile_ocen;
    if (empty($ile_ocen)) $najlepsi[4][$i] = 0;
    else $najlepsi[4][$i] = round($suma_ocen / $ile_ocen / 10 * 100);
    unset($suma_ocen);
    $i++;


}

@array_multisort($najlepsi[4], SORT_NUMERIC, SORT_DESC, $najlepsi[3], SORT_NUMERIC, SORT_DESC, $najlepsi[1], $najlepsi[2]);
$ile_users = count($najlepsi[1]);
if ($ile_users < 10) $do = $ile_users; else $do = 10;

for ($i = 0; $i < $do; $i++) {
    echo '<td><img src="[b]co tu wpisac?![/b]"><a href="osoba-'.$najlepsi[1][$i].'.html">'.$najlepsi[2][$i].'</a></td>';
}


dodam ze tak wygladaja tabele:

USERS:
id - ID userow
login - login userow

FOTKI:
id - id fotki
para - czyli id usera do ktorego nalezy fotka..

czyli wyglada to np tak w tabeli fotki:
id | para
10|1
11|1
13|2
8|2
2|1

dodam jeszcze ze przy najnowszych sobie poradzilem.. oto kod:
Kod
$ile = 20;
if(!$p) $p = 0;
$p = (int)$p;
$ile = (int)$ile;

$wynik0 = mysql_query("SELECT * FROM users");
$ile_par = mysql_num_rows($wynik0);

$wynik = mysql_query("SELECT * FROM users ORDER BY id DESC LIMIT 7");

while($szukane = mysql_fetch_array($wynik))
{


  $wynik2 = mysql_query("SELECT * FROM fotki WHERE para=".$szukane['id']." ORDER BY id DESC");
  $szukane2 = mysql_fetch_array($wynik2);
  $ile2 = mysql_num_rows($wynik2);
  $data = date("Y-m-d, H:i:s", $szukane2[data]);



if($ile2 != 0)
echo'<td><center><a href="osoba-'.$szukane[id].'.html"><img src="zdj/mini-'.$szukane2['id'].'.jpg" style="border: double; height: 100px; width: 100px"></a></center>
<br><center><a href="osoba-'.$szukane[id].'.html"><b>'.$szukane['login'].'</b></a></center></td>';
else echo'<td><center><a href="osoba-'.$szukane[id].'.html"><img src="zdj/mini-'.$szukane2['id'].'.jpg" style="border: double; height: 100px; width: 100px"></a></center>
<br><center><a href="osoba-'.$szukane[id].'.html"><b>'.$szukane['login'].'</b></a></center></td>';
}


prosze o pomoc! moge dac nawet dane do serwera a nawet zaplacic jesli bedzie to konieczne smile.gif
Shili
  1. <?php
  2. while ($uzytkownicy = mysql_fetch_array($wynik)) {
  3. $zapytanie = "SELECT ocena FROM oceny WHERE para=$uzytkownicy[id]";
  4. $wynik2 = mysql_query($zapytanie);
  5. $ile_ocen = mysql_num_rows($wynik2);
  6. while ($oceny = mysql_fetch_array($wynik2)) {
  7. $suma_ocen += $oceny[ocena];
  8. }
  9. $najlepsi[1][$i] = $uzytkownicy[id];
  10. $najlepsi[2][$i] = $uzytkownicy[login];
  11. $najlepsi[3][$i] = $ile_ocen;
  12. if (empty($ile_ocen)) $najlepsi[4][$i] = 0;
  13. else $najlepsi[4][$i] = round($suma_ocen / $ile_ocen / 10 * 100);
  14. /* dodany przeze mnie kod */
  15. $zapytanie2 = "SELECT * FROM fotki WHERE para=".$najlepsi[1][$i].""; // tutaj masz wybór fotek z id przypisanym do kolejnych userów wyciąganych z tabli
    cy ocen
  16. ... (dalszy niezbędny kod)
  17. $najlepsi[5][$i] = zdjęcie_pobrane_z tablicy_fotki;
  18. /* koniec dodanego kodu */
  19. unset($suma_ocen);
  20. $i++;
  21.  
  22.  
  23. }
  24. ?>

Możesz spróbować zabrać się za to w ten sposób - co prawda przychodzi Ci o wiele więcej zapytań i lepiej byłoby to zrobić w pętli wyświetlającej już tylko tych siedmiu najlepszych userów, jak ich określiłeś.
djiras1
Shilli spoko tylko.. jestem troche zielony w mysql i co wpisac w miejsce:

... (dalszy niezbędny kod)
i
zdjęcie_pobrane_z tablicy_fotki;
?
prosze o odpowiedź;)

moge zaplacic jbc;) zalezy mi na tym:)
ayeo
Witam! Jeżeli zdjęcie może mieć tylko jednego właściciela to po co robisz osobną tabelę z relacjami (para)? W tabeli ze zdjęciami dodaj kolumnę user_id jako i tyle. To tak na marginesie winksmiley.jpg
Pozdrawiam!
Shili
  1. <?php
  2. while($szukane = mysql_fetch_array($wynik))
  3. {
  4.  
  5.  
  6. $wynik2 = mysql_query("SELECT * FROM fotki WHERE para=".$szukane['id']." ORDER BY id DESC");
  7. $szukane2 = mysql_fetch_array($wynik2);
  8. $ile2 = mysql_num_rows($wynik2);
  9. $data = date("Y-m-d, H:i:s", $szukane2[data]);
  10.  
  11.  
  12.  
  13. if($ile2 != 0) 
  14. echo'<td><center><a href="osoba-'.$szukane[id].'.html"><img src="zdj/mini-'.$szukane2['id'].'.jpg" style="border: double; height: 100px; width: 100px"></a></center>
  15. <br><center><a href="osoba-'.$szukane[id].'.html"><b>'.$szukane['login'].'</b></a></center></td>'; 
  16. else echo'<td><center><a href="osoba-'.$szukane[id].'.html"><img src="zdj/mini-'.$szukane2['id'].'.jpg" style="border: double; height: 100px; width: 100px"></a></center>
  17. <br><center><a href="osoba-'.$szukane[id].'.html"><b>'.$szukane['login'].'</b></a></center></td>';
  18. }
  19. ?>

Tutaj już jak dobrze zrozumiałam wyciągasz fotki. Musisz zrobić coś bardzo podobnego, dlatego nie pisałam kodu - masz pewną pulę wyników, jednak jeśli każdemu userowi przyporządkowana jest tylko jedna fotka możesz zrobić to nie za pomocą mysql_fetch_array() a za pomocą mysql_fetch_row();
czyli na przykład (pisane z palca i po ciężko-imprezowym długim weekendzie - uprzedzam):
  1. <?php
  2. $szukane3 = mysql_fetch_row(); // wyciągasz wiersz z wyników zapytania (przy jednym zdjęciu na użytkownika będzie to jedyny wiersz)
  3. $najlepsi[5][$i] = $szukane3['id']; // zdjęcie przypisane do każdego użytkownika
  4. ?>

Jak już mówiłam - lepiej zrobić to w pętli, gdzie wyświetlasz wyniki - pobierzesz tylko określoną liczbę zdjęć nie wszystkie, jak w podanym przeze mnie przykładzie.
djiras1
no niestety ale dalej w mysql jestem zielony sad.gif wiec jesli nie napiszecie tego od poczatku do konca tak jak ma byc to ja nic z tego nie zaczaje i na nic to wszystko sciana.gif

dziala, temat mozna zamknac, dziekuje wszystkim za pomoc winksmiley.jpg
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-2024 Invision Power Services, Inc.