Forum hosting 4un.eu
Odczytujemy dane z bazy danych - Wersja do druku

+- Forum hosting 4un.eu (http://www.4un.eu/forum)
+-- Dział: Inne (/Forum-Inne)
+--- Dział: Tworzenie stron (/Forum-Tworzenie-stron)
+---- Dział: MySQL (/Forum-MySQL)
+---- Wątek: Odczytujemy dane z bazy danych (/Thread-Odczytujemy-dane-z-bazy-danych)



Odczytujemy dane z bazy danych - deros - 04-24-2012 10:47 PM

Baza danych byłaby zupełnie bezwartościowa, gdybyśmy mogli do niej
tylko zapisywać dane, usuwać i edytować.
Dlatego dziś zajmiemy się odczytem danych z naszej tabeli
ogólne polecenie w SQL do odczytywania danych wygląda tak:

Cytat:SELECT x FROM y WHERE z = n
gdzie za x wstawiamy nazwe pola, którego wartość chcemy się dowiedzieć
za y wstawiamy nazwę tabeli, z której mają być pobrane dane.
polecenie where określa jakie kryteria mają być spełnione, aby pole było
wybrane (w poście dotyczącym operatorów opisałem co można wpisywać jako warunek).
za z wpisujemy nazwę pola, a za n wstawiamy wartość pola jaką pod podaną nazwą
mają mieć szukane rekordy w polu z.
I wszystko jasneOczko
Ok, będzie prościej na przykładzie, zanim jednak do tego przejdziemy,
należy zapamiętać, aby połączyć się z bazą danych, w której się znajduje tabela na której pracujemy,
oraz aby użytkownik, którego użyjemy do logowania się do bazy danych miał uprawnienia
do wykonywania polecenia SELECT.

Do zobrazowania polecenia select posłużę się znów naszą tabelą chemia,
zawierającą dane 3 uczniów :
uczeń z nr 1 dostał ze sprawdzianu 4, z odpowiedzi 3, a z aktywności 5
uczeń nr 2 dostał ze sprawdzianu 5, z odpowiedzi 5 i z aktywności 5
uczeń z nr 3 ma ocenę 3 z odpowiedzi.
załóżmy, że nasz nauczyciel chce wyświetlić numery uczniów, którzy dostali
5 z aktywności
polecenie w SQL będzie wyglądało następująco:
Cytat:SELECT nr FROM chemia where aktywnosc=5
oczywiście możemy pobierać kilka pól rekordu wystarczy ich nazwy wypisać po przecinku.
I tak np. wpisując polecenie:
Cytat:SELECT nr, odpowiedz FROM chemia where aktywnosc=5
nasz nauczycie dowie się nie tylko numery uczniów ale także co dostali Ci uczniowie
z odpowiedzi.
Cytat:SELECT * FROM chemia where nr >1
Powyższe polecenie spowoduje za sprawą * wyświetlenie wszystkich wartości rekordów,
ale dotyczących tylko uczniów z nr 2 i 3 w dzienniku.
* oznacza wszystkie pola.

W języku PHP wstawimy więc kod:
Cytat:$szukamy = mysql_query("SELECT * FROM chemia where nr >1");
i co? możemy się tutaj ździwić zaczynając przygodę z bazami danych. Wprawdzie polecenie się wykona,
ale nic nie zostanie wyświetlone. Dzieje się tak ponieważ cały wynik został przekazany do zmiennej $szukamy,
teraz potrzebujemy go rozbić na wiersze służy do tego jedna z dwóch komend PHP do obsługi bazy MySQL:
mysql_fetch_array lub mysql_fetch_row pierwsza zwraca rekordy indeksowane (indeksu zmiennej tablicowej nie mylić z indeksem tabeli np. primary key. pisząc
rekordy indeksowane mam na myśli właśnie indeks zmiennej) nazwami pola w bazie danych, a druga numerami pola w tabeli (zaznaczając, że w PHP pierwszy numer to zero,
więc numer pierwszego pola w tabeli jest właśnie numerem zerowym).

Przykład wyświetlenia wyników z wykorzystaniem mysql_fetch_array
Cytat:$szukamy = mysql_query("SELECT * FROM chemia where nr >1");
while ($uczen = mysql_fetch_array($szukamy)){
echo(' <p>nr: '.$uczen['nr'].' sprawdzian: '.$uczen['sprawdzian'].' odpowiedź: '.$uczen['odpowiedz'].' aktywność: '.$uczen['aktywnosc'].' </p><hr>');
}

Przykład wyświetlenia wyników z wykorzystaniem mysql_fetch_row
Cytat:$szukamy = mysql_query("SELECT * FROM chemia where nr >1");
while ($uczen = mysql_fetch_row($szukamy)){
echo(' <p>nr: '.$uczen[0].' sprawdzian: '.$uczen[1].' odpowiedź: '.$uczen[2].' aktywność: '.$uczen[3].' </p><hr>');
}

Wykonanie tych poleceń spowoduje wyświetlenie na ekranie uczniów z nr 2 i 3 oddzielonych od siebie linią poziomą.

Załóżmy teraz, że nasz nauczyciel chce wyświetlić oceny oraz numer w dzienniku, ale tylko uczniów, którzy dostali 3 z odpowiedzi,
zmieni jedynie kryterium wyszukiwania:
Cytat:$szukamy = mysql_query("SELECT * FROM chemia where odpowiedz=3");
while ($uczen = mysql_fetch_array($szukamy)){
echo(' <p>nr: '.$uczen['nr'].' sprawdzian: '.$uczen['sprawdzian'].' odpowiedź: '.$uczen['odpowiedz'].' aktywność: '.$uczen['aktywnosc'].' </p><hr>');
}

Jak pamiętają Państwo z poprzednich moich wpisów na forum, nazwe tabeli można pobrać ze zmiennej jak również nazwę pola czy wartość do kryterium.


Cytat:$szukamy = mysql_query("SELECT * FROM $przedmiot where $cos = '$ocena'");
while ($uczen = mysql_fetch_row($szukamy)){
echo(' <p>nr: '.$uczen[0].' sprawdzian: '.$uczen[1].' odpowiedź: '.$uczen[2].' aktywność: '.$uczen[3].' </p><hr>');
}

W ten sposób wychowawca klasy będzie mógł przejrzeć oceny z dwowolnego przedmiotu (czyli innej tabeli tu operujemy na tabeli chemia)
ale jak np. $przedmiot = "biologia"; to będziemy mieli dostęp do tabeli z biologii, $cos ="odpowiedz"; $ocena=4;
dzięki takiej operacji na zmiennych nasz wychowawca dowie się, jakie oceny z przedmiotu biologia mają uczniowie, którzy otrzymali 4 z odpowiedzi,
a jak zmieni wartość zmiennej $cos na $cos="nr"; to otrzyma jakie oceny dostał z biologii uczeń z nr 4.

Po zakończeniu wyszukiwania, kiedy dane już są nam niepotrzebne (np. wyciągnęliśmy ję tylko po to, żeby zostały wydrukowane na ekranie i zostały wydrukowane)
należy wyzerować pamięc zmiennych bazy danych (gdyż obciąża nam to tylko serwer)
służy do tego polecenie:
Cytat:mysql_free_result($szukamy);
Po zakończeniu pracy w bazie danych zamykamy połączenie
Cytat:mysql_close($connection);