Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Kilka prostych pytan dot. polaczenia php+mysql
Komarek
post 17.07.2011, 18:20:32
Post #1





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 18.12.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
morbic
post 17.07.2011, 18:24:28
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Komarek
post 17.07.2011, 18:53:40
Post #3





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 18.12.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Rid
post 17.07.2011, 19:01:17
Post #4





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

Ostrzeżenie: (0%)
-----


Zalecałbym poczytać o pętli foreach.
Go to the top of the page
+Quote Post
morbic
post 17.07.2011, 19:05:04
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Złe zapytanie.

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


Zwróć uwagę na apostrofy.


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Komarek
post 18.07.2011, 07:47:28
Post #6





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 18.12.2009

Ostrzeżenie: (0%)
-----


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 ;]
Go to the top of the page
+Quote Post
morbic
post 18.07.2011, 10:37:02
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Komarek
post 18.07.2011, 11:32:06
Post #8





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 18.12.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
morbic
post 18.07.2011, 11:55:10
Post #9





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Komarek
post 18.07.2011, 12:45:09
Post #10





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 18.12.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
YaQzi
post 18.07.2011, 12:53:47
Post #11





Grupa: Zarejestrowani
Postów: 94
Pomógł: 31
Dołączył: 12.10.2008
Skąd: WAT

Ostrzeżenie: (0%)
-----


jakie grupowanie... :x

  1. SELECT COUNT(DISTINCT id) AS totalach
  2. FROM achsk_playerinfo


--------------------
 Wszystkie wielkości świata nie są tyle warte, co dobra przyjaźń...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.06.2025 - 05:04