PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Komplexere Datenabfrage per SELECT

10. Februar 2020
  1. Home
  2. »
  3. MySQL Tutorial
  4. »
  5. 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.

Inhaltsverzeichnis

  • 1 WHERE-Statements
  • 2 Logische Operatoren AND / OR
  • 3 Vergleichsoperatoren
  • 4 LIKE und Wild-Card-Suche
  • 5 Doppelte Einträge verhindern

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ätze 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 vorherigen 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.

1
$sql = "SELECT * FROM users WHERE email = '[email protected]'";

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:

1
2
3
4
5
6
7
8
9
// Findet alle Einträge mit Vornamen Max und Nachnamen Mustermann:
$sql = "SELECT * FROM users WHERE vorname = 'Max' AND nachname = 'Mustermann'";
 
// Findet alle Einträge mit Vornamen Max oder mit Nachnamen Mustermann:
$sql = "SELECT * FROM users WHERE vorname = 'Max' OR nachname = 'Mustermann'";
 
// Findet alle Einträge mit Vornamen Max und Nachnamen Mustermann
// oder die als E-Mail Adresse [email protected] angegeben haben:
$sql = "SELECT * FROM users WHERE (vorname = 'Max' AND nachname = 'Mustermann') OR (email = '[email protected])";

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Findet alle Einträge die nicht Musermann heißen
$sql = "SELECT * FROM users WHERE nachname != 'Mustermann'";
 
// Findet alle Einträge mit id < 5
$sql = "SELECT * FROM users WHERE id < 5";
 
// Findet alle Einträge mit id >= 5
$sql = "SELECT * FROM users WHERE id >= 5";
 
// Findet alle Einträge mit den IDs 2, 3, 5 und 7
$sql = "SELECT * FROM users WHERE id IN (2,3,5,7)";
 
// Findet alle Einträge, außer die mit den IDs 2, 3, 5 und 7
$sql = "SELECT * FROM users WHERE id NOT IN (2,3,5,7)";
 
// Findet alle Einträge bei denen die Spalte last_order den speziellen Wert NULL hat
$sql = "SELECT * FROM users WHERE last_order IS NULL";
 
// Findet alle Einträge bei denen die Spalte last_order nicht den speziellen Wert NULL hat
$sql = "SELECT * FROM users WHERE last_order IS NOT NULL";

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:

1
2
// Findet alle User deren Name mit Ma beginnt (z.B. Max, Mark, Markus, Matthias...)
$sql = "SELECT * FROM users WHERE vorname LIKE 'Ma%'";

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.

1
2
// Findet alle Einträge die 'Suchwort' in der entsprechenden Spalte enthalten
$sql = "SELECT * FROM tabelle WHERE spalte LIKE '%Suchwort%'";

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:

1
2
3
4
5
//Liste mit eindeutigen Vornamen, alphabetisch sortiert
$sql = "SELECT DISTINCT vorname FROM users ORDER BY vorname";
 
//Liste mit eindeutigen Namen (Vor- und Nachname(, alphabetisch sortiert
$sql = "SELECT DISTINCT vorname, nachname FROM users ORDER BY vorname, nachname";

Autor: Nils Reimers
Zurück: Simple Datenabfrage per SELECT
Weiter: Prepared Statements

MySQL Tutorial

  • MySQL installieren und starten
  • phpMyAdmin
  • Verbindung aufbauen
  • Simple Datenabfrage
  • Komplexere Datenabfrage
  • Prepared Statements
  • Daten einfügen
  • Daten aktualisieren
  • Daten löschen
  • Gefundene Einträge zählen
  • DATE-Datenbankspalten
  • Datum- und Zeitfunktionen
  • MySQL Fehlermeldungen
  • Datenbankverbindung schließen
  • JOIN
  • Indizes
  • Normalformen
  • Fremdschlüssel
  • Übersicht SQL-Befehle
  • Crashkurs MySQL
  • Crashkurs MySQLi
  • Crashkurs PDO
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. webgo Ø 0 Min.
  2. netcup Ø 0 Min.
  3. All-Inkl.com Ø 3 Min.
  4. Linevast Ø 3 Min.
  5. checkdomain Ø 5 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 9 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 14 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}