Gegevens uit de database halen

Info 
Door: Mirax Moeilijkheidsgraad: 2/3
Views:19.313Reacties: 8(Bekijken)
  Log in om zelf te reageren
 Waardering:9/10 (2 stemmen)

Basiscursus MySQL» Inleiding MySQL | Verbinding maken met de database | Tabellen maken | Gegevens aan een tabel toevoegen | Gegevens uit de database halen | Gegevens aanpassen en verwijderen




Op dit moment heb je een tabel producten, waarin een aantal producten staat. Met het formuliertje van de vorige pagina, kun je er zeer eenvoudig nieuwe aan toevoegen. Maar nu wil je ook laten zien wat er in de database staat, dat kan natuurlijk ook. De eenvoudigste manier is de volgende:

#Code
1
2
3
4
SELECT
    *
FROM
    producten;


Deze zal alle rijen en alle kolommen uit de tabel producten halen. Er zijn manieren om restricties op te leggen aan welke informatie je precies selecteert. Eerst zullen we echter deze gegevens met PHP weergeven.

Implementeren in PHP
Ik ga er vanuit dat je de query weer heb opgeslagen in $qProducten, met het volgende voorbeeld kun je dan de informatie geordend weergeven
#Code
1
2
3
4
5
6
7
<?php
$rProducten = mysql_query( $qProducten );
while( $aProduct = mysql_fetch_assoc( $rProducten ) )
{
    
echo $aProduct['naam'] . ' voor ' . $aProduct['prijs'] . ' euro<br />';
}
?>


De eerste regel is duidelijk, je moet de query weer in de database uitvoeren (je moet wel weer een connectie hebben). Het afvangen van fouten laat ik weer aan je zelf over.

Op de tweede regel worden de resultaten 'gefetched'. Dit is nodig omdat de resource van de database ($rProducten), moet worden omgezet in een voor PHP bruikbaar formaat. Met bijvoorbeeld mysql_fetch_assoc kan dat. Deze levert een array op, die als keys de namen van de kolommen heeft uit de tabel. Deze staat in een while-lus, zodat alle geselecteerde rijen een voor een in een array worden geplaatst. Deze array kun je tussen de accolades gewoon gebruiken. Er zijn nog meerdere manieren om te fetchen, maar dit is een veelgebruikte manier.

Beperkingen aan selecteren
Om te beginnen kan je ervoor kiezen om niet alle kolommen te selecteren. In de eerste query selecteerden we alle kolommen, dus ook de kolom id, die we niet eens gebruikten. Dat is dus in feite overbodige informatie. We kunnen deze selectie beperken, en het is verstandig om dit ook te doen, dit kan zo:

#Code
1
2
3
4
SELECT
    naam, prijs
FROM
    producten;


Dit heeft niet veel uitleg nodig denk ik?

Je kunt er ook voor kiezen om een beperkt aantal rijen te selecteren. Dit kan door je query als volgt uit te breiden:

#Code
1
2
3
4
5
6
SELECT
    naam, prijs
FROM
    producten
WHERE
    id=1;


Achter de WHERE komen een of meerdere statements die restricties opleggen aan de te selecteren rijen. Met het bovenstaande voorbeeld selecteer je slechts een rij, namelijk die met als id=1 (De id was uniek, er is dus slechts een rij met id=1).

Je kunt ook selecteren aan de hand van de prijs

#Code
1
2
3
4
5
6
7
SELECT
    naam, prijs
FROM
    producten
WHERE
    prijs>50 AND
    prijs<150;


Kan je zelf bedenken wat deze query doet? Behalve > en <, kun je als vergelijking ook gebruiken <=, >=, en <> (niet gelijk aan). Met de select opdracht kun je nog veel meer dingen doen, zoals het gecombineerd selecteren uit verschillende tabellen, maar dat voert (veel) te ver voor de basiscursis.

Sorteren
De gegevens in de tabel kan je ook gesorteerd weergeven. Dit kan als volgt

#Code
1
2
3
4
5
6
SELECT
    naam, prijs
FROM
    producten
ORDER BY
    prijs DESC, naam ASC;


Hiermee geef je aan de je uit de tabel producten weer de kolommen naam en prijs selecteert, maar dat er bovendien gesorteerd moet worden. Er wordt eerst gesorteerd op prijs, en als die gelijk zijn op naam. DESC staat voor descending, wat aflopend betekent, in ons geval de duurste eerst. ASC betekent oplopend. Hier wordt dus ook op alfabet gesorteerd.

Tenslotte kun je je ook beperken tot de duurste 10 producten, (of de eerste 10 in het alfabet, of welke kolom dan ook).

#Code
1
2
3
4
5
6
7
SELECT
    naam, prijs
FROM
    producten
ORDER BY
    prijs DESC, naam ASC
LIMIT 0,10;


Het enige wat uitlegt behoeft zijn de cijfers 0 en 10. De nul geeft de startpositie aan, deze is dus voor de eerste, 10 geeft het aantal resultaten aan dat je vanaf de startpositie wilt selecteren. Door de startpositie dynamisch te kiezen, kun je een resultatenpagina maken met bijvoorbeeld 10 resultaten per pagina.

Het belangrijkste gedeelte van deze reeks tutorials heb je nu achter de rug. Er rest ons nog een tweetal dingen, namelijk het wijzigen en verwijderen van gegevens, dit komt in het laatste deel aan bod.

«Gegevens aan een tabel toevoegen Gegevens aanpassen en verwijderen »

8 reacties
seuqcaj Geplaatst op 26-09-2009 om 22:36
 

Regular
Ik wil van een database tabel alle records weergeven maar dan het laatste record het eerst enz.tot het eerste record, maar ik kan nergens vinden hoe dat moet
Glenn Potter Geplaatst op 05-08-2008 om 12:54
 

Regular
Ik krijg niet mijn bestanden uit de database te zijn maar allemaal chinese tekens
Dion PHP Geplaatst op 18-07-2008 om 17:04
 

Regular
Hoe moet ik dit oplossen?:


Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/www/itemdb.freehostia.com/archief2/inex.php on line 4
dj170590 Geplaatst op 01-05-2008 om 00:08
 

Regular
Het is ondertussen al opgelost. Bij mij kwam het door een foutje op deze pagina. Ik heb product neergezet ipv producten in de volgende regel code: while( $aProduct = mysql_fetch_assoc( $rProduct ) )
dj170590 Geplaatst op 01-05-2008 om 00:04
 

Regular
Sorry ik snap niet waar ik deze code moet plaatsen en ik kan niet op het forum komen. Kan iemand me aub helpen?
Deze code: SELECT
naam, prijs
FROM
producten;
Waar moet deze geplaatst worden?
Mijn bestand ziet er nu uit zoals in het stukje implementeren in PHP.
Alvast bedankt :)

Pagina 1 2 

Om te reageren moet je ingelogd zijn.
Nog niet geregistreerd? Doe dat dan nu!


Terug naar gewone pagina

Websitemaken wordt gehost door Nucleus.be, uw Hosting Solution Builder