Komplexere Datenabfrage per SELECT

Im ersten Teil ging es um simple Datenbankanfragen mittels dem SQL-Befehl SELECT. Dort haben wir immer stets alle Datensätze abgefragt. Jetzt im zweiten Teil geht es um das Filtern von Einträgen, beispielsweise suchen wir alle Nutzer mit einem gewissen Vor- oder Nachnamen. Dazu verwenden wir die Anweisung WHERE. Ebenfalls lernen wir den Einsatz von prepared statements in PDO.

WHERE-Statements

Mittels der WHERE-Anweisung können wir gezielt unsere Datenbank durchsuchen und nur gewisse Datensätze ausgeben. Beispielsweise den Datensatz für einem Benutzer mit einem gewissen Namen oder die Datensätzer aller Nutzer die zwischen 1980 und 1990 geboren wurden. Ihr könnt die WHERE-Anweisung selbstverständlich auch mit der ORDER BY-Anweisung und vor der LIMIT-Anweisung kombinieren, die wir euch im voherigen Tutorial vorgestellt hatten. Dabei kommt die WHERE-Anweisung vor der ORDER BY-Anweisung und vor der LIMIT-Anweisung. So könnt ihr also beispielsweise mittels WHERE nach bestimmten Einträgen suchen, mittels ORDER BY sortieren und mittels LIMIT euch nur die ersten Einträge ausgeben lasst.

Eine Abfrage des Benutzers mit der ID 1 sieht beispielsweise wie folgt aus:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$sql = "SELECT * FROM users WHERE id = 1";
foreach ($pdo->query($sql) as $row) {
   echo $row['vorname']." ".$row['nachname']."<br />";
   echo "E-Mail: ".$row['email']."<br /><br />";
}
?>

Hier können wir auch auf die foreach-Schleife verzichten, da wir nur einen Datensatz zurückerhalten und es alternativ wie folgt schreiben.

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$sql = "SELECT * FROM users WHERE id = 1";
$user = $pdo->query($sql)->fetch();
echo $user['vorname']." ".$user['nachname']."<br />";
echo "E-Mail: ".$user['email']."<br /><br />";
?>

Möchte man beispielsweise nach einem Nutzer mit einer gewissen E-Mail-Adresse suchen, so müssen wir das Argument per Anführungszeichen umschließen.

Logische Operatoren AND / OR

Im obigen Fall haben nur eine Spalte auf einen Wert untersucht. Mittels den logischen Operatoren AND und OR können wir ähnlich wie bei if-Anweisung mehrere Spalten überprüfen:

Vergleichsoperatoren

MySQL bietet auch eine Reihe von Vergleichsoperatoren , damit könnt ihr beispielsweise überprüfen ob eine Spalten nicht einem gewissen Wert entspricht, alle Einträge mit einer Spalte größer oder kleiner einem gewissen Wert usw. Die wichtigsten Funktionen sind:

LIKE und Wild-Card-Suche

Mittel der Anweisung LIKE können wir nach einfachen Mustern in unserer Datenbank suchen, beispielsweise nach allen Personen deren Vorname mit Ma beginnt. Dazu verwenden wir LIKE in Kombination mit der Wild-Card %. % steht dabei für beliebig viele Zeichen:

Neben % können wir auch _ verwenden. Dies entspricht genau einem unbekannten Zeichen. 'De_' würde also auf die Wörter Der, Den, Des usw. passen.

Hiermit können wir eine einfache Suche für unsere Tabelle bauen.

Doppelte Einträge verhindern

Mittels der DISTINCT-Anweisung können wir in einem SELECT doppelte Einträge vermeiden, sprich, so erhalten wir nur die eindeutigen Einträge zurück. Dabei muss das DISTINCT ganz am Anfang der Spaltenauswahl stehen.

Nachfolgend ein Beispiel, zum einen um die eine Liste aller (eindeutigen) Vornamen und aller (eindeutigen) Vor- und Nachnamen zu erhalten:

Autor: