Selecteren van records

Nu we gegevens naar onze database hebben weggeschreven, willen we ze natuurlijk op weer uit de database op kunnen halen. Dit kunnen we doen met behulp van een SELECT query.

Syntax
De syntax van de simpelste SELECT query ziet er als volgt uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT
    kolomnaam,
    kolomnaam
FROM
    tabelnaam

Deze syntax vormt de basis van elke SELECT query. Hoewel we later zullen zien dat hier vele uitbreidingen en varianten op mogelijk zijn, zullen we eerst deze basis maar eens gebruiken om wat gegevens te selecteren.

Namen selecteren (SQL)
Stel nu dat we de voornamen van onze werknemers uit de tabel willen selecteren. Dan zouden we daar de volgende query voor gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    voornaam
FROM
    werknemers
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
+----------+
| voornaam |
+----------+
| Nico     |
| Tim      |
| Pim      |
+----------+

Zoals we zien levert deze query netjes een lijstje met alle voornamen in onze tabel op.

Namen selecteren (PHP)
Ook in PHP kunnen we dezelfde query namen gaan selecteren. Alleen zullen we dan nog wel een manier moeten vinden om de namen op het scherm te zetten. Dat doen we als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
require_once 'db_config.php';

$sql = "
    SELECT
        voornaam
    FROM
        werknemers
"
;

if(!$res = mysql_query($sql))
{

    trigger_error(mysql_error().'<br />In query: '.$sql);
}

elseif(mysql_num_rows($res) == 0)
{

    echo 'Geen resultaten gevonden';
}

else
{
    while($row = mysql_fetch_assoc($res))
    {

        echo $row['voornaam'].'<br />';
    }
}

?>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Nico
Tim
Pim

Tot aan regel 14 komt de code bekend voor, daarna zien we echter iets nieuws. In een elseif statement controleren we met mysql_num_rows() of de resultaat-set in $res wel rijen bevat. Dit geeft ons namelijk een indicatie of er wel gegevens uit de database opgehaald zijn.

Als dat aantal niet gelijk is aan 0 gebruiken we mysql_fetch_assoc() om de rijen uit de resultaat set te halen. We zetten deze functie in een while-loop omdat we verwachten dat de resultaat-set meerdere rijen bevat. Op die manier doorlopen we alle rijen en hebben met $row telkens de beschikking over 1 rij.

De functie mysql_fetch_assoc() zorgt ervoor dat er een associatieve array gemaakt wordt van een rij uit de resultaat-set. De sleutels in die array zijn dan de kolomnamen en de waarden de bij de kolommen horende waarden. Aangezien wij de voornaam ophaalden, kunnen we deze dus uitlezen met $row['voornaam'].

Alle records selecteren
Als we alle gegevens uit een bepaalde tabel willen selecteren, kunnen we de volgende query gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT *
FROM werknemers
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
+----+----------+---------------+------------+---------------+----------------+
| id | voornaam | tussenvoegsel | achternaam | geboortedatum | salaris_schaal |
+----+----------+---------------+------------+---------------+----------------+
|  1 | Nico     | de            | Boer       | 1958-03-24    |             18 |
|  2 | Tim      |               | Janssen    | 1982-01-30    |             10 |
|  3 | Pim      |               | Vosse      | 1982-01-30    |             10 |
+----+----------+---------------+------------+---------------+----------------+

Het * staat hierbij voor alle kolommen en dient alleen gebruikt te worden als ook daadwerlijk alle kolommen nodig zijn. Als dat niet het geval is, geef je gewoon netjes de kolomnamen op.

WHERE
In de meeste gevallen zullen we niet alle records willen selecteren, maar enkel de records die aan een bepaalde voorwaarde voldoen. Zo'n voorwaarde kunnen we opgeven in de WHERE clausule van een query.

Stel dat we alleen de voornaam van de werknemer op willen halen die in salaris schaal 10 zitten. De volgende query zouden we dan gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
    voornaam,
    salaris_schaal
FROM
    werknemers
WHERE
    salaris_schaal = 10
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
+----------+----------------+
| voornaam | salaris_schaal |
+----------+----------------+
| Tim      |             10 |
| Pim      |             10 |
+----------+----------------+

Net als in PHP kunnen we ook de groter dan en kleiner dan operators gebruiken. Stel dat we alle gegevens willen selecteren van werkenmers die in salaris schaal 12 of hoger zitten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    *
FROM
    werknemers
WHERE
    salaris_schaal >= 12
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
+----+----------+---------------+------------+---------------+----------------+
| id | voornaam | tussenvoegsel | achternaam | geboortedatum | salaris_schaal |
+----+----------+---------------+------------+---------------+----------------+
|  1 | Nico     | de            | Boer       | 1958-03-24    |             18 |
+----+----------+---------------+------------+---------------+----------------+

Het * is hier wederom geoorloofd omdat we werkelijk alle kolommen wilden selecteren.

WHERE ... AND ... OR
Als we records op willen halen die aan meedere voorwaarden voldoen, gebruiken we daarvoor bijvoorbeeld de volgende query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT
    voornaam
FROM
    werknemers
WHERE
    salaris_schaal = 10
AND
    achternaam = 'Vosse'
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
+----------+
| voornaam |
+----------+
| Pim      |
+----------+

In theorie zouden we onbeperkt veel keer AND aan de query toe kunnen voegen. Of dat nuttig is en of bovendien je datamodel dan nog juist is, is een tweede.

De tegenhanger van AND is OR. Dat kunnen we gebruiken als we records op willen halen die aan minimaal één van de gestelde voorwaarden voldoen. Het gebruik en de positie in de query is precies hetzelfde als bij AND. In een query is elke willekeurge combinatie van WHERE, AND en OR mogelijk, zolang de WHERE maar in de query voorkomt.

ORDER BY
De volgorde waarop records in een database staan heeft geen enkele waarde. Het sorteren van records zullen we dan dus ook bij het selecteren ervan moeten doen. Met behulp van ORDER BY is dat mogelijk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT
    voornaam,
    tussenvoegsel,
    achternaam,
    geboortedatum
FROM
    werknemers
ORDER BY
    voornaam ASC
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
+----------+---------------+------------+---------------+
| voornaam | tussenvoegsel | achternaam | geboortedatum |
+----------+---------------+------------+---------------+
| Nico     | de            | Boer       | 1958-03-24    |
| Pim      |               | Vosse      | 1982-01-30    |
| Tim      |               | Janssen    | 1982-01-30    |
+----------+---------------+------------+---------------+

In de ORDER BY geven we één of meer kolommen (gescheiden door een komma) op waarop we willen sorteren. Met behulp van ASC of DESC achter de kolomnaam geven we de sorteerrichting aan. ASC sorteert oplopend terwijl DESC aflopend sorteert.

Als je zowel een WHERE als een ORDER BY clausule in je query hebt, komt de ORDER BY altijd na de WHERE.

LIMIT
Met behulp van LIMIT is het mogelijk om het aantal records dat uit de database gehaald wordt te beperken. De syntax van de LIMIT is als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
LIMIT van, aantal

Op de plaats van van vul je het record in waar de limit moet beginnen. Het eerste record in een set heeft, net als in PHP arrays, de waarde 0. Vervolgens geef je met aantal aan hoeveel records er opgehaald moeten worden.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT
    *
FROM
    werknemers
LIMIT 1,2
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
+----+----------+---------------+------------+---------------+----------------+
| id | voornaam | tussenvoegsel | achternaam | geboortedatum | salaris_schaal |
+----+----------+---------------+------------+---------------+----------------+
|  2 | Tim      |               | Janssen    | 1982-01-30    |             10 |
|  3 | Pim      |               | Vosse      | 1982-01-30    |             10 |
+----+----------+---------------+------------+---------------+----------------+

De eerste parameter van de LIMIT is optioneel, dus die kun je ook weglaten. In dat geval wordt het aangegeven aantal records vanaf het begin opgehaald. Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
LIMIT 5

is hetzelfde als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
LIMIT 0,5

De plaats van de LIMIT in de query is, ongeacht welke clausules er nog meer in zitten, altijd aan het einde van de query.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.