Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Kilka prostych pytan dot. polaczenia php+mysql
Forum PHP.pl > Forum > Przedszkole
Komarek
Witam
Aby nie przeciagac napisze z czym mam problem ;]

Posiadam tabele mysql w ktorej mam kolumny: uid, imie, stats, zdobyte
W kolumnie UID mam cyfrowe podporzadkowanie do ID Nagrody (ktore sa zapisywane w innej tabeli)
W kolumnie STATS mam ilosc wymaganych postow uzytkownika
Kolumna ZDOBYTE obiera wartosc 1 (w przypadku zdobycia nagrody)

Mam kilka pytan ;]

1. Jak obliczyc ilosc nagrod z tej tabeli ? (UID mam od 0 do 16) jak to policzyc ?
Ale niestety mam tez cos takiego ze UID 0 wystepuje kilka razy dla roznych uzytkownikow Wiec jak policzyc ile roznych UID posiadam w tej kolumnie?

2. Jak wypisac na liscie, liste nagrod i osoby ktore ja zdobyly ? Chodzi mi o to, ze jeden skrypt tworzy mi liste z tymi nagrodami (UID 0-16), a obok tych nagrod sprawdza w ktorym wierszu, kolumna `zdobyte` zwraca wartosc 1 (i pobiera z tego wiersza dane['Imie'] ?)

3. Oraz jak dla jednego uzytkownika (np na stronie 'index.php?imie=Komarek') posegregowac w liscie aby najpierw byly wyswietlane nagrody w ktorych `zdobyte` = 1 ?
Tak aby byly w kolejnosci rosnacej UID, ale rowniez w zaleznosci od pola 'zdobyte' ?

Pozdrawiam i czekam na odpowiedz wink.gif
morbic
1.
  1. SELECT COUNT(uid) AS liczba FROM nagrody GROUP BY uid


2. Za mało danych, ale bez problemu do zrobienia jednym zapytaniem SQL

3.
  1. SELECT * FROM nagrody WHERE imie = 'Komarek' ORDER BY zdobyte DESC, uid ASC
Komarek
Apropos mojego pkt2)...

Zrobilem cos takiego:

Kod
$wynik = mysql_query("SELECT * FROM `nagrody` WHERE `Imie = Komarek`");
while($wiersz = mysql_fetch_assoc($wynik))
{
$id = $wiersz['uid'];
$nick = $wiersz['Imie'];
$stats = $wiersz['Stats'];
$earned = $wiersz['Zdobyte'];


echo "<tr>
        <td>".$id."</td>
        <td>".$nick."</td>
        <td>".$stats."</td>
        <td>".$earned."</td>
    </tr>";
    }

Tylko pytanie brzmi czemu mi wywala error:
Kod
        ( ! ) Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\xampp\htdocs\nagrody\index.php on line 193


Linia 193 to ta w ktorej mam uzyta funkcje while...

Co wogole znaczy ten blad?
Na moj rozum parametr pierwszy (czyli $wynik) powinien byc zrodlem... Ale on jest zrodlem! Wiec co jest nie tak ? biggrin.gif
Rid
Zalecałbym poczytać o pętli foreach.
morbic
Złe zapytanie.

Powinno być:
  1. $wynik = mysql_query("SELECT * FROM `nagrody` WHERE `Imie` = 'Komarek'");


Zwróć uwagę na apostrofy.
Komarek
Cytat(morbic @ 17.07.2011, 19:24:28 ) *
1.
  1. SELECT COUNT(uid) AS liczba FROM nagrody GROUP BY uid


Mozesz to bardziej w jasny i klarowny sposob opisac? Co to 'liczba'? Po co to 'AS', po co 'GROUP BY' ?
Oraz ciag dalszy jak to zrobic aby je wyswietlic ;]
morbic
  1. $wynik = mysql_query("SELECT COUNT(uid) AS liczba FROM nagrody GROUP BY uid");
  2. $wiersz = mysql_fetch_assoc($wynik);
  3. $liczba = $wiersz['liczba'];


W zmiennej $liczba masz liczbę rekordów, o którą Ci chodziło.

"AS liczba" mówi tylko o tym, pod jaką nazwą wyciągnąć dane pole. Gdybyś w tabeli miał kolumny id, nazwa, opis i użył zapytania:
  1. SELECT id AS identyfikator, nazwa AS imie, opis AS tekst FROM tabela

to gdy wyciągniesz to w PHP do zmiennej $wiersz, będziesz miał $wiersz['identyfikator'] , $wiersz['imie'], $wiersz['tabela']

Taki tam prosty przykład smile.gif

Co do GROUP BY: http://compzone.org/art-Zastosowanie+dyrek...GROUP+BY-9.html
Komarek
A wiec tak mam cos takiego:

Kod
$totalach = mysql_query("SELECT COUNT(id) AS totalach FROM `achsk_playerinfo`");
$totalach2 = mysql_result($totalach,0);


Ale mam id 0,1,2,3,4,5,...,15,16,0,1,2,3,...,15,16

Chce by pokazalo mi laczna ilosc ROZNYCH id, tym czasem liczy mi wszystkie i wyswietla 34.
Jak to zrobic by pokazywalo tylko rozne ID ? smile.gif
morbic
  1. $totalach = mysql_query("SELECT COUNT(id) AS totalach FROM `achsk_playerinfo` GROUP BY id");
  2. $totalach2 = mysql_result($totalach,0);


Poczytaj materiały, które dałem wink.gif
Komarek
Cytat(morbic @ 18.07.2011, 12:55:10 ) *
  1. $totalach = mysql_query("SELECT COUNT(id) AS totalach FROM `achsk_playerinfo` GROUP BY id");
  2. $totalach2 = mysql_result($totalach,0);


Poczytaj materialy, które dalem wink.gif


ano widzisz i tu lezy pies pogrzebany
Probowalem rowniez z wykorzystaniem GROUP BY (dokladnie tak jak napisales)
ale mam problem poniewaz wyswietla mi wynik: 2
Jak to zrobic by poprawnie wyswietlic ? smile.gif
YaQzi
jakie grupowanie... :x

  1. SELECT COUNT(DISTINCT id) AS totalach
  2. FROM achsk_playerinfo
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.