Luky.cc NetworkLuky.cc NetworkLuky.cc Network - AutoDetectLuky.cc Network - AutoDetectEinloggenLuky.cc Network - AutoDetect

LukyDeluxe8 1.0 
dAxEngine 1.0 powered 

LukyDeluxe8

LukyChat

LukyThoughts

PHP

MySQL

CS: S

Service

 

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
W
ir 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?
D
as 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
I
m 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
J
edes 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
J
a, 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
G
enauso 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?
A
liase 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
M
an 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
M
it 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





 

Navigation «
 

Einführung
Tutorial
Codeschnipsel

Sitemap

LD unterstützen «
 

 

Developed by dAxpHpNIzER™
Copyright © Lukas Wojcik 2002 - 2025. Alle Rechte vorbehalten. AGB

 

Extesizer.at