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 4: Weitere Tricks mit SELECT


Antworten zu Fragen aus Kapitel 3:
1. Wie lautet der SQL Befehl zum Sortieren?
"ORDER by feldname".
2. Was verändert ASC bzw. DESC?
Die Reihenfolge der Sortierung.
3. Ist es egal, wohin ich den SQL Befehl zum Sortieren in eine Query schreibe?
Nein jeder Befehl hat seinen bestimmten Platz.
4. Was nützen mir Klammern bei der WHERE Abfrage?
Sie beeinflussen die Reihenfolge in der MySQL die Abfrage ausführt.
5. Was bewirken Aliase?
Sie sind Verweise auf Tabellen.
6. Kann ich ein SQL Query in einem SQL Query ausführen, um zum Beispiel Informationen für die WHERE Klausel zu sammeln?
Ja.
7. Was nützt mir ein Timestamp?
Ein Timestamp sind die vergangen Sekunden seit der UNIX Epoche. Man kann damit ganz einfach mit Sekunden rechnen.

Arbeiten mit mehreren Tabellen
M
ySQL wurde entwickelt, um das Datenbankerlebnis so flexibel zu gestalten wie es nur geht. Deshalb sollte man nicht alle Daten in eine Tabelle speichern. Der Umgang mit mehreren Tabellen ist etwas schwieriger als der Bisherige mit nur einer jedoch auch einfach zu erlernen.
Wir haben in "neuedatenbank_tabelle1" Benutzernamen und Passwörter gespeichert. Nun soll das ganze auch einen Sinn haben.
Dazu erstellen wir eine weitere Tabelle "neuedatenbank_tabelle2" in der wir zum Beispiel Bestellungen von Benutzern speichern.

In dieser Tabelle haben wir jetzt eine automatische ZählerID, eine UserID, eine ArtikelID und einen Timestamp pro Zeile. Wenn einer unserer Benutzer jetzt etwas bestellt, wird in diese Tabelle seine UserID, die ArtikelID und ein Timestamp eingetragen.

Eine weitere Tabelle mit Artikelnamen und Kosten.

Tutorial_Kapitel4_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_Tabelle3 (name,kosten) VALUES ('Staubsauger','350')", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle3 (name,kosten) VALUES ('Fernseher','200')", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle3 (name,kosten) VALUES ('SAT-Anlage','500')", $connect) OR echo mysql_error();
mysql_close($connect);

?>


A
ngenommen unsere User können einen Staubsauger, einen Fernseher oder eine SAT-Anlage bestellen. Diese drei Artikel haben wir nun in Beispiel 1 in unsere dritte Artikeltabelle hinzugefügt.

Zur Demonstration des ganzen Beispiels fügen wir noch die ganzen Bestellungen der Benutzer in Tabelle zwei hinein.

Tutorial_Kapitel4_Beispiel_2.php:
<?php

$connect
= mysql_connect("localhost", "Luky", "123456789") OR die("Keine Verbindung");
mysql_select_db("NeueDatenbank", $connect) OR die("Falsche Datenbank");
// Maxi
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (1,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (1,2,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (1,2,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (1,1,".time().")", $connect) OR echo mysql_error();
// Fritz
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (2,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (2,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (2,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (2,2,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (2,1,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (2,1,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (2,1,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (2,1,".time().")", $connect) OR echo mysql_error();
// Susi
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (3,2,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (3,2,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (3,2,".time().")", $connect) OR echo mysql_error();
// Franzl
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (4,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (4,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (4,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (4,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (4,3,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (4,1,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (4,1,".time().")", $connect) OR echo mysql_error();
$q = mysql_query("INSERT into NeueDatenbank_Tabelle2 (userid,artikelid,timestmp) VALUES (4,1,".time().")", $connect) OR echo mysql_error();
mysql_close($connect);

?>


Maxi
kauft eine SAT-Anlage, zwei Fernseher und einen Staubsauger.
Fritz
kauft drei SAT-Anlagen, einen Fernseher und vier Staubsauger.
Susi
kauft keine SAT-Anlage, drei Fernseher und keinen Staubsauger.
Franzl kauft fünf SAT-Anlagen, keinen Fernseher und drei Staubsauger.

N
un ist unsere Einkaufsliste voll und der Händler soll auch sehen können, wer was bestellt, sonst hat das ganze wenig Sinn.

Wer hat wie viel bestellt?

Tutorial_Kapitel4_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 null from NeueDatenbank_Tabelle2 WHERE userid=3 AND artikelid=2", $connect) OR echo mysql_error();
echo
"Susi hat ".mysql_num_rows($q)." Fernseher bestellt.";
mysql_close($connect);

?>


D
ieses Beispiel sagt uns, wie viele Fernseher UserID 3 bestellt hat. Anstatt mysql_num_rows() können wir auch direkt im MySQL Query eine Abfrage über die Anzahl der Zeilen machen.

Tutorial_Kapitel4_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 userid,count(userid) from NeueDatenbank_Tabelle2 GROUP by userid", $connect) OR echo mysql_error();
while(
$data = mysql_fetch_array($q))
{
 echo
"UserID: ".$data[0]." hat ".$data[1]." Artikel bestellt.";
}
mysql_close($connect);

?>


W
enn man diesen Code aufruft bekommen man die Anzahl der bestellten Artikel von allen Usern mit nur einem SQL Query. Dies geht dank dem "GROUP by"- Befehl. GROUP by sagt MySQL, es soll alle Zeilen die ein gemeinsames Feld (zum Beispiel userid) mit den selben Daten drinnen haben in nur einer Zeile zurückgeben. Somit können wir im SELECT Bereich auch die MySQL Funktion count() einsetzen
GROUP by kommt nach WHERE und vor LIMIT:

Tutorial_Kapitel4_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 userid,count(userid) from NeueDatenbank_Tabelle2 WHERE artikelid=2 GROUP by userid", $connect) OR echo mysql_error();
while(
$data = mysql_fetch_array($q))
{
 echo
"UserID: ".$data[0]." hat ".$data[1]." Fernseher bestellt.";
}
mysql_close($connect);

?>


Tabellen verknüpfen
T
abellen zu verknüpfen kann sehr nützlich sein, da dies in nur einem einzigen SQL Query geschieht. Wie Du siehst, wird in den oberen Beispiel 3 und 4 nur die UserID gezeigt und nicht der Name. Niemanden interessiert doch die UserID... Viel mehr der Name! Deshalb kann man jetzt die UserID von der Tabelle der bestellten Artikel nehmen und im selben Query den Benutzernamen herausfinden. Wie das geht?

Tutorial_Kapitel4_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 user.name,count(bestellungen.userid) from NeueDatenbank_Tabelle2 AS bestellungen LEFT JOIN NeueDatenbank_Tabelle1 AS user ON user.id=bestellungen.userid GROUP by bestellungen.userid", $connect) OR echo mysql_error();
while(
$data = mysql_fetch_array($q))
{
 echo
"Benutzer: ".$data[0]." hat ".$data[1]." Artikel bestellt.";
}
mysql_close($connect);

?>


Wie funktioniert LEFT JOIN?
L
EFT JOIN dient sehr gut zur Verbindung von Tabellen. Hierbei muss man nun Aliase verwenden. Diese definiert man mit "Tabelle AS alias". Nach jeder Tabelle und Definierung von einem Alias kann man nun einen LEFT JOIN anwenden um Tabellenelemente miteinander zu verknüpfen. "Tabelle1 AS tb1 LEFT JOIN Tabelle2 AS tb2" Darauf folgt der "ON" Befehl welcher sagt, welche Felder die selben Daten beinhalten müssen. In unserem Beispiel 5 muss eben die UserID gleich sein.

Wir verbinden also:

ID Name Passwort
 |
 - - - - -
          |
ID UserID ArtikelID Timestmp

"ON tb1.feld1=tb2.feld1".

Wie du in Beispiel 5 siehst, wenden wir dann bei allen übrigen Feldernamen den Alias an.

Drei Tabellen verbinden

Tutorial_Kapitel4_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 user.name,count(bestellungen.userid),sum(artikel.kosten) from NeueDatenbank_Tabelle2 AS bestellungen LEFT JOIN NeueDatenbank_Tabelle1 AS user ON user.id=bestellungen.userid LEFT JOIN NeueDatenbank_Tabelle3 AS artikel ON bestellungen.artikelid=artikel.id GROUP by bestellungen.userid", $connect) OR echo mysql_error();
while(
$data = mysql_fetch_array($q))
{
 echo
"Benutzer: ".$data[0]." hat ".$data[1]." Artikel im Wert von ".$data[2]." bestellt.";
}
mysql_close($connect);

?>


Alle Beispiele von Kapitel 4





 

Navigation «
 

Einführung
Tutorial
Codeschnipsel

Sitemap

LD unterstützen «
 

 

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

 

Extesizer.at