|
T u t o r i a l
|
|
MySQL Tutorial > Kapitel 3: Erweitertes Benutzen von SELECT
Antworten zu Fragen aus Kapitel 2:
1. Wozu dient das SELECT
Statement?
Zum Auslesen einer Tabelle.
2. Wozu dient das
DELETE
Statement?
Zum Löschen einer oder mehreren Zeilen.
3. Wozu dient das
UPDATE
Statement?
Zum Bearbeiten einzelner Zellen in Zeilen.
4. Wozu dient das INSERT
Statement?
Zum Hinzufügen von Zeilen in Tabellen.
Viele Zeilen
Wir fügen nun einige Benutzer zu unserer Tabelle "neuedatenbank_tabelle1"
hinzu:
Tutorial_Kapitel3_Beispiel_1.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("INSERT into NeueDatenbank_Tabelle1 (name,passwort) VALUES ('Fritz','1212121212')", $connect) OR echo mysql_error(); $q = mysql_query("INSERT into NeueDatenbank_Tabelle1 (name,passwort) VALUES ('Susi','f3f3h03ng3')", $connect) OR echo mysql_error(); $q = mysql_query("INSERT into NeueDatenbank_Tabelle1 (name,passwort) VALUES ('Franzl','qwertz')", $connect) OR echo mysql_error(); mysql_close($connect);
?>
|
Wem gehört welche ID?
Das Feld ID wird dank "Auto-Increment" automatisch pro "INSERT" Befehl hoch
gezählt. Nun wollen wir zum Beispiel wissen, welchen Benutzern die ID 2 und die
ID 3 zugeordnet wurden.
Tutorial_Kapitel3_Beispiel_2.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT name from NeueDatenbank_Tabelle1 WHERE id=2", $connect) OR echo mysql_error(); $data = mysql_fetch_array($q); echo "ID 2 gehört ".$data["name"].""; // Fritz $q = mysql_query("SELECT name from NeueDatenbank_Tabelle1 WHERE id=3", $connect) OR echo mysql_error(); $data = mysql_fetch_array($q); echo "ID 3 gehört ".$data["name"].""; // Susi mysql_close($connect);
?>
|
Zeilen auf Wunsch sortieren
Im folgenden Beispiel werden die Benutzer nach Ihren Namen sortiert und
ausgegeben.
Tutorial_Kapitel3_Beispiel_3.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT id,name from NeueDatenbank_Tabelle1 ORDER by name ASC", $connect) OR echo mysql_error(); while($data = mysql_fetch_array($q)) { echo $data["id"].".) ".$data["name"].""; } mysql_close($connect);
?>
|
Geht es auch umgekehrt?
Um die umgekehrte Reihenfolge zu erhalten braucht man einfach das ASC
durch DESC ersetzen:
Tutorial_Kapitel3_Beispiel_4.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT id,name from NeueDatenbank_Tabelle1 ORDER by name DESC", $connect) OR echo mysql_error(); while($data = mysql_fetch_array($q)) { echo $data["id"].".) ".$data["name"].""; } mysql_close($connect);
?>
|
Und schon fängt die Ausgabe von dem letzen User im Alphabet als erstes
an.
(ASC = Ascending (Steigen), DESC = Descending (Absteigen))
Position von ORDER by
Jedes Element in einer SQL Query muss auf den richtigen Ort geschrieben
werden. ORDER by zum Beispiel muss, wenn WHERE angegeben ist, nach WHERE
erscheinen.
Nach Zufall sortieren
Ja, das ist auch mit MySQL möglich:
Tutorial_Kapitel3_Beispiel_5.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT id,name from NeueDatenbank_Tabelle1 ORDER by RAND()", $connect) OR echo mysql_error(); while($data = mysql_fetch_array($q)) { echo $data["id"].".) ".$data["name"].""; } mysql_close($connect);
?>
|
WHERE mit OR, AND und Klammern
Genauso wie in PHP bei Rechenbeispielen die tiefsten Klammern zuerst
bearbeitet werden, so kann man dies auch in der WHERE Funktion ausnutzen:
Tutorial_Kapitel3_Beispiel_6.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT id,name from NeueDatenbank_Tabelle1 WHERE ((name='Susi' AND id=3) OR (name='Franzl' AND id=4)) ORDER by RAND()", $connect) OR echo mysql_error(); while($data = mysql_fetch_array($q)) { echo $data["id"].".) ".$data["name"].""; } mysql_close($connect);
?>
|
In diesem Beispiel noch mal mit Zufallssortierung. Es zeigt Susi und
Franzl in zufälliger Reihenfolge an.
Was sind Aliase?
Aliase sind Verweise auf Tabellen. Sie werden nötig, wenn man auf mehrere
Tabellen in einer SQL Query zugreift. Falls eine Tabelle einen ziemlich langen
Namen (in unserem Fall NeueDatenbank_Tabelle1) hat, so kann man diesen mit einem
kurzen Aliasnamen definieren.
Tutorial_Kapitel3_Beispiel_7.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT tbl1.id,tbl1.name from NeueDatenbank_Tabelle1 AS tbl1 WHERE tbl1.id=2 OR tbl1.id=4 OR tbl1.id=3 ORDER by 2", $connect) OR echo mysql_error(); while($data = mysql_fetch_array($q)) { echo $data["id"].".) ".$data["name"].""; } mysql_close($connect);
?>
|
Wie Du siehst, müssen alle Felder die in Verbindung mit NeueDatenbank_Tabelle1
sind auch mit "tbl1" hinten ran bestückt werden.
Doch wieso steht nun bei ORDER by eine zwei. Wenn man bei ORDER by zum Beispiel
eine Zwei angibt, so wird nach dem zum Beispiel zweiten Element in der Liste
nach SELECT sortiert. Das wäre nun "tbl1.name".
SELECT in SELECT
Man kann in einen SQL Query noch einen SQL Query einbauen, indem man ihn mit
einer Klammer von dem übergeordneten SQL Query trennt:
Tutorial_Kapitel3_Beispiel_8.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT id,name from NeueDatenbank_Tabelle1 WHERE id=(SELECT id from NeueDatenbank_Tabelle1 WHERE name='Susi')", $connect) OR echo mysql_error(); while($data = mysql_fetch_array($q)) { echo $data["id"].".) ".$data["name"].""; } mysql_close($connect);
?>
|
Sieht vielleicht etwas verwirrend aus, ist jedoch ganz einfach. Der "Haupt"-
SELECT will das Element "name" bekommen. Mit WHERE sagen wir, er solle nach ID
entscheiden. In dem SQL Query darauf "saugen" wir die ID mittels eines weiteren
WHERE Befehls aus. Es darf beim zweiten Query nur eine Zeile zurückkommen.
In der Praxis würde man es so, wie es in dem Beispiel ist, nicht machen da es
ziemlich sinnlos ist. Es ist nur ein Beispiel.
Felder der Tabellen nachträglich ändern / hinzufügen
Fügen wir doch noch ein Feld der Tabelle NeueDatenbank_Tabelle1 hinzu. Um
dies zu tun, klicke auf den Button Struktur.
Danach einfach auf den Ok Button.
Wir fügen ein Feld "timestmp" hinzu, als INT(10). Falls Du noch nichts über
Timestamps gehört hast: Dies ist eine Zahl die sich pro Sekunde verändert. Daher
kannst du sie für Sekundenunterschiede sehr gut anwenden. Wenn du der Funktion
date() einen Timestamp an zweiter Stelle
angibst, gibt date() Dir die Uhrzeit
zurück, an der der Timestamp generiert wurde.
Einige Wörter dürfen nicht als Feldname benutzt werden, da sie durch MySQL
reserviert sind. Daher nennen wir das
Feld "timestmp" und nicht "Timestamp".
time()
Mit time() generierst Du einen
Timestamp:
Tutorial_Kapitel3_Beispiel_9.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("UPDATE NeueDatenbank_Tabelle1 SET timestmp=".(time()-10000)." WHERE name='Maxi'", $connect) OR echo mysql_error(); $q = mysql_query("UPDATE NeueDatenbank_Tabelle1 SET timestmp=".(time()-6000)." WHERE name='Fritz'", $connect) OR echo mysql_error(); $q = mysql_query("UPDATE NeueDatenbank_Tabelle1 SET timestmp=".(time()-3000)." WHERE name='Susi'", $connect) OR echo mysql_error(); $q = mysql_query("UPDATE NeueDatenbank_Tabelle1 SET timestmp=".time()." WHERE name='Franzl'", $connect) OR echo mysql_error(); mysql_close($connect);
?>
|
Nun wollen wir zum Beispiel wissen, wer sich bis vor 7000 Sekunden
"registriert" hat.
Tutorial_Kapitel3_Beispiel_10.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT id,name from NeueDatenbank_Tabelle1 WHERE timestmp>".(time()-7000), $connect) OR echo mysql_error(); while($data = mysql_fetch_array($q)) { echo $data["id"].".) ".$data["name"]." "; } mysql_close($connect);
?>
|
Oder sortieren, wer sich wann "registriert" hat.
Tutorial_Kapitel3_Beispiel_11.php:
<?php
$connect = mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung"); mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank"); $q = mysql_query("SELECT id,timestmp,name from NeueDatenbank_Tabelle1 ORDER by timestmp ASC", $connect) OR echo mysql_error(); while($data = mysql_fetch_array($q)) { echo $data["id"].".) ".$data["timestmp"]." ".$data["name"]." "; } mysql_close($connect);
?>
|
Mit ASC vom Kleinsten zum Größten, mit DESC vom Größten zum Kleinsten.
Zeit für Experimente
Mit dem Wissen, das Du bis jetzt über MySQL gesammelt hast, könntest du zum
Beispiel schon ein Gästebuch programmieren.
Fragen zu diesem Kapitel:
1. Wie lautet der SQL Befehl zum Sortieren?
2. Was verändert ASC bzw. DESC?
3. Ist es egal, wohin ich den SQL Befehl zum Sortieren in eine Query schreibe?
4. Was nützen mir Klammern bei der WHERE Abfrage?
5. Was bewirken Aliase?
6. Kann ich ein SQL Query in einem SQL Query ausführen, um zum Beispiel
Informationen für die WHERE Klausel zu sammeln?
7. Was nützt mir ein Timestamp?
Alle Beispiele von Kapitel 3
|
|
|