Daten auswählen
Spalten auswählen
Ich will eine Abfrage zusammenstellen. Jetzt kommen die SQL-Befehle zur Anwendung, ich beachte die Versale Schreibweise der BEFEHLE und die kleinschreibweise der tabellennamen und -spalten! Es ist besser eine präzise Abfrage zu formulieren, statt die ganze Datenbank in einen Araay laden zu wollen.
SELECT * FROM
Dies wählt die Spalte 'name' aus der Tabelle 'blumen' (und speichert sie in einer Variablen namens $wahl:
<?
$wahl_01 = "SELECT name FROM blumen";
?>
Das wählt die beiden Spalten 'name' und 'bluetezeit' aus der Tabelle 'blumen':
<?
$wahl_02 = "SELECT name, bluetezeit FROM blumen";
?>
Alle Spalten einer Tabelle werden mit einem * ausgewählt
(später kann ich auf alle zurückgreifen, z.B. echo den ersten Fund in der Spalte soundso).
<?
$wahl_03 = "SELECT * FROM blumen";
?>
SELECT AS FROM
Der Spaltenname (die Feldbezeichnung) wird zum Variablenname für den Spalteninhalt. Will ich andere Variablennamen geben, erfolgt dies wie in Arrays:
<?
$wahl_04 = "SELECT name AS blumennamen FROM blumen";
?>
Wenn verschiedene Tabellen eine Spalte 'name' besitzen, können diese Variablen später einzeln angesprochen werden und sie haben sich nicht überschrieben.
Auswahlbedingungen
Nicht immer will ich ganze Spalten aus einer Tabelle auswählen, ich will gezielter den später darzustellenden Wert herauswählen können. Inzwischen habe ich eine 3. Tabelle erstellt die heist 'rosen' sie hat die 3 Spalten 'id', 'begriff' und 'beschreibung' mit 7 Datensätzen. Der Stern in den folgenden Beispielen steht für 'alle Spalten', es könnte(n) dort auch wie oben die Spalte(n) eingegrenzt werden.
WHERE < oder >
Wähle alles aus der Tabelle 'rosen' wo unter 'id' eine kleinere Zahl als 3 steht:
<?
$wahl_05 = "SELECT * FROM rosen WHERE id < 3";
?>
WHERE LIKE
Wähle alles aus der Tabelle 'rosen' wo unter 'begriff' das Wort 'Rosette' steht:
<?
$wahl_06 = "SELECT * FROM rosen WHERE begriff LIKE 'Rosette' ";
?> // Anführungszeichen beachten
WHERE LIKE %
Wähle alles aus der Tabelle 'rosen', wenn irgenwo unter 'begriff' die Zeichen 'ose' stehen. Die %-Zeichen sind Platzhalter für mögliche beliebige Zeichen:
<?
$wahl_07 = "SELECT * FROM rosen WHERE begriff LIKE '%ose%' ";
?>
WHERE = mit AND oder OR
Wähle aus der Tabelle 'rosen' den Wert der Spalte 'id', wenn in der Spalte 'begriff' der Wert gleich 'Arthrose' ODER 'arthrose' ist UND in der Spalte 'beschreibung' der Wert gleich 'Gelenkleiden' ist.
Achtung: in MySQL hat 'gleich' nur ein =, der Syntax wie in PHP mit zwei == ist nicht korrekt. Die Abfrage wird mit Klammern zusammengefasst und präzisiert!
So können mehrere OR oder AND Bedingungen aneinander gereiht werden.
<?
$wahl_18 = "SELECT id FROM rosen WHERE (begriff = 'Arthrose' OR begriff = 'arthrose') AND beschreibung='Gelenkleiden' ";
?>
WHERE BETWEEN
Wähle aus der Spalte 'begriff' der Tabelle 'rosen' den Wert, wenn unter der Spalte 'id' der Wert zwischen 3 und 6 beträgt.
<?
$wahl_08 = "SELECT begriff FROM rosen WHERE id BETWEEN 3 AND 6";
?>
WHERE BINARY
Wähle alles aus der Tabelle 'rosen', wo in der Spalte 'name' der Wert 'Guertel' Casesensitive steht. Normalerweise achtet MySQL nicht auf die Gross-/Kleinschreibung, mit BINARY schon.
<?
$wahl_16 = "SELECT * FROM rosen WHERE BINARY name = 'Guertel'";
?>
MATCH AGAINST AND OR
Wähle alles aus der Tabelle 'rosen', wo in der Spalte 'name' der Wert 'Buschwind' und in der Spalte 'farbe' der Wert '105' steht. Es ginge auch oder.
<?
$wahl_17 = "SELECT * FROM rosen WHERE MATCH name AGAINST ('Buschwind') AND MATCH farbe AGAINST ('105')";
?>
Weiterverarbeitung
ORDER BY
Standardmässig Sortieren von A nach Z (ASC muss nicht befohlen werden)
<?
$wahl_09 = "SELECT * FROM rosen ORDER BY begriff";
?>
ORDER BY DESC
Von hinten her (DESC - absteigend - muss befohlen werden)
<?
$wahl_10 = "SELECT * FROM rosen ORDER BY begriff DESC";
?>
LIMIT
Die letzten 4 Datensätze auswählen. Sie werden zuerst rückwärts nach id sortiert (nützlich z.B. bei News):
<?
$wahl_11 = "SELECT * FROM rosen ORDER BY id DESC LIMIT 4";
?>
Einfacher lassen sich die 4 ersten Datensätze auswählen:
<?
$wahl_12 = "SELECT * FROM rosen LIMIT 4";
?>
Ab dem 3. Datensatz 4 Datensätze heraus picken (vom 3. bis zum 6.):
<?
$wahl_13 = "SELECT * FROM rosen LIMIT 3, 4";
?>
COUNT AS GROUP BY
Wähle erstmal alle Werte der Spalte 'farbe' aus, dann zähle das Vorkommen jedes der Werte
(jeder Wert kommt in jeder Zeile 1x vor) und schreibe dieses in eine neue Spalte namens 'anzahl',
dann gruppiere die Werte (zusammenzählen gleicher Farben).
<?
$wahl_14 = "SELECT farbe, COUNT(farbe) AS anzahl FROM blumen GROUP BY farbe";
?>
Manipulieren mit Operatoren
Ohne die Datensätze dadurch zu verändern kann die Ausgabe manipuliert werden.
Zum Beispiel die Werte in der Spalte 'farbe' verdoppeln:
<?
$wahl_15 = "SELECT begriff, beschreibung, farbe * 2 FROM blumen;
?>
Achtung: Damit habe ich noch keine Abfrage durchgeführt und nichts dargestellt; ich habe erst etwas zum Abfragen ausgewählt.