In de vorige les heb je geleerd hoe je artikels uit een MySQL-databank kan weergeven in een webpagina. De PHP-code op de server zet de rijen uit de tabel om in stukjes HTML-code. In deze les leg ik uit hoe je gegevens kan filteren uit de tabel. D.w.z. je wil net alles tonen, maar slechts bepaalde artikels die voldoen aan jouw zoekopdracht.

Database Queries

Een query is een vraag of een verzoek. We kunnen een database voor specifieke informatie opvragen en hebben een record set geretourneerd. Kijk naar de volgende vraag (met behulp van standaard SQL):

SELECT statement: vraag gegevens op

SELECT LastName FROM Employees
De bovenstaande zoekopdracht selecteert alle gegevens in de kolom "achternaam" in de "werknemers" table. Surf naar https://www.guru99.com/sql.html voor meer uitleg. Het is heel normaal dat de PHP-code alle artikels omzet in HTML. We vragen immers om alle artikels uit de tabel "articles" op te halen: select * from articles * betekent letterlijk "alles". SQL om databankrecords te filteren We willen nu echter gaan filteren op de resultaten. Stel dat ik enkel de artikels wil waarbij het woord "sint" in de titel voorkomt: select * from articles where title like '%sint%' We schrijven dus niet "title like sint", maar title like '%sint%'. De beide weglatingstekens maken duidelijk dat het hier gaat om een "woord", iets wat we in de programmeerwereld bestempelen als een "string" (nee, niet in die andere betekenis) of "tekenreeks". Stel dat het veld title getallen zou bevatten (INT, integer of geheel getal) dan zou je die weglatingstekens niet schrijven.Het woord sint staat niet enkel tussen twee weglatingstekens, maar ook tussen twee %-tekens. Die duiden aan dat er voor en achter het woord sint al andere tekens mogen staan. Indien je artikels zou willen zoeken waarvan de titels beginnen met "sint", dan zou je het volgende doen: select * from articles where title like 'sint%' Als je titels zou willen zoeken die perfect overeenkomen met het woord sint, dan zou je het volgende schrijven: select * from articles where title = 'sint' De query of zoekopdracht rechtstreeks in de SQL schrijven, is enkel zinvol als je in je pagina enkel bepaalde records wil weergeven. Je zou bijvoorbeeld in de databank een kolom kunnen aanmaken met de veldnaam "rubriek". Als je dan zou zoeken op een bepaalde rubriek, dan zou je enkel die artikels krijgen waarvan de veldnaam "rubriek" gelijk is aan een bepaalde naam. select * from articles where rubriek = 'sport' Het is ook mogelijk om te filteren op meerdere kolommen. select * from articles where title like '%sint%' or content like '%sint%' Tot slot (maar daarmee is lang nog niet alles gezegd over SQL) kan je in meerdere velden zoeken op meerdere variabelen: select * from adressen where postcode=3300 and naam like '%janssens%'