» Startseite
» Newsübersicht
» Kontakt
» Impressum

» Forum
» Gästebuch

» Einführung PHP
» Einführung MySQL
   » Anfang
   » Tabellen füllen
   » Verbin. aufbauen
   » Daten ausgeben
   » Weitere Abfragen
   » Daten hinzufügen
   » Daten ändern
   » Daten löschen
   » Anzahl d. Zeilen
   » Verbin. beenden
   » MySQL-Fehler


PHP-Einfach.de

Counterdienst:
Digicount.de
Unser werbefreier Counter- und Statistikdienst

Weitere Abfragen

WHERE
Bisher haben wir immer alle Datensätze abgefragt, aber zum Glück können wir auch gezielt einzelne Datensätze abfragen. Dabei ändert sich nur der Text (Wert) der Variable $abfrage, alles andere bleibt gleich.

Zu erst lernen wir das Attribut WHERE kennen, damit fragen wir Datensätze ab, die einem oder mehreren Kriterien entsprechen.

Die Abfrage dafür muss so aussehen:
<?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
?>
Wie ihr wisst, muss danach wieder das alte Script folgen, also so:
<?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
   {
   echo "$row->url <br>";
   }
?>
Aber wie schon oben erwähnt, ändert sich nur der Text (Wert) von $abfrage.

Mit dieser Abfrage wählen wir alle Datensätze aus, welche die id 1 haben, und nur dieser Datensatz wird dann ausgegeben.

Wir können aber auch andere Kriterien setzen, z.B. so:
<?php
$abfrage = "SELECT * FROM links WHERE id != '1'";
?>
Hiermit geben wir alle Datensätze aus, die als ID nicht den Wert 1 haben.

Oder wir fragen die Datensätze ab, in denen die id kleiner als 10 ist
<?php
$abfrage = "SELECT * FROM links WHERE id < '10'";
?>
Dies geht natürlich auch mit größer (>) aber auch mit allen anderen Operatoren die ihr von den Schleifen/if-Anweisungen her kennt.

Wir können auch andere Spalten überprüfen lassen, z.B. alle Datensätze ausgeben, in denen als name Andavos angegeben wurde. Dies sieht dann so aus:
<?php
$abfrage = "SELECT * FROM links WHERE name
LIKE 'Andavos'";
?>
Anstatt das Gleichheitszeichens wurde jetzt LIKE benutzt. Man könnte zwar ein Gleichheitszeichen benutzen, allerdings sollt ihr beide Varianten sehen. Man kann auch NOT LIKE benutzen, dies ergibt den selben Effekt wie !=.

Evt. möchte man ja auch mehrere Datensätze abfragen, dafür gibt es das Attribut: IN ()
<?php
$abfrage = "SELECT * FROM links WHERE id IN ('1', '3')";
?>
Dies würde die Datensätze 1 und 3 abfragen. Das gleiche geht auch mit Text. Natürlich kann man die Werte auch durch Variablen ersetzen und den Variablen dann Werte zu weisen, z.B. aus einem Formular.

Manchmal möchte man ja nur Datensätze abfragen, in denen der Name mit A anfängt. Für unbekannte Zeichen benutzt man in MySQL das: Prozentzeichen (%).
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'A%'";
?>
Man kann das Prozentzeichen immer benutzen, wenn man die genaue Zeichenfolge nicht kennt, also wenn man alle Namen ausgeben möchte, die ein a haben: Die Abfrage sieht so aus:
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE '%a%'";
?>
Man kann auch mehrere Kriterien setzen, man benutzt dazu AND, OR und XOR. Sie haben die gleiche Funktion wie bei einer if-Anweisung.
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'Nils'
AND id < '10'";
?>
Diese Abfrage würde alle Datensätze ausgeben die als name Nils haben und als id einen kleineren Wert als 10.
ORDER BY
Möchte man die Ausgabe sortieren, z.B. so, dass der neuste Beitrag immer oben steht (dafür kann man auch gut das id-Feld benutzen).
Man kann aber auch andere Felder (z.B. das URL-Feld) sortieren lassen, z.B. alphabetisch.

Hierfür benötige wir ORDER BY
<?php
$abfrage = "SELECT * FROM links ORDER BY id";
?>
Diese Abfrage würde die Einträge der id nach aufsteigend (1,2,3,4) ausgeben, wenn wir am Schluss noch ein DESC schreiben, wird die Ausgabe der id nach absteigend (4,3,2,1) ausgegeben.
<?php
$abfrage = "SELECT * FROM links ORDER BY id DESC";
?>
Manchmal sieht man auch anstatt einem DESC ein ASC, dies hat die gleiche Wirkung, wie die Abfrage von oben (1,2,3,4), aber dies wird von PHP als Standard eingesetzt, wenn es nicht angegeben wurde.

Wir können jetzt auch die anderen Felder sortiert ausgeben lassen
<?php
$abfrage = "SELECT * FROM links ORDER BY name";
?>
Dies würde die Ausgabe nach der Spalte name alphabetisch (a,b,c,d) ausgeben. Die Angabe von DESC würde dies wieder umdrehen (d,c,b,a).

Möchten wir für die Sortierung mehrere Kritieren angeben, müssen wir diese durch Komma trennen.
<?php
$abfrage = "SELECT * FROM links ORDER BY name, id DESC";
?>
Diese Abfrage sortiert die Ausgabe erst nach dem name (a,b,c,d) und dann nach der id allerdings falsch herum (4,3,2,1).

LIMIT
Möchte man nur eine gewisse Anzahl von Datensätzen ausgeben, setzt man den Befehl LIMIT ein.

<?php
$abfrage = "SELECT * FROM links LIMIT 3";
?>
Diese Abfrage würde nur 3 Datensätze ausgeben, denn mit LIMIT bestimmen wir, das nur eine gewisse Anzahl von Datensätzen ausgeben wird.

<?php
$abfrage = "SELECT * FROM links LIMIT 10,5";
?>
Hiermit werden 5 Datensätze ab dem 10. abgefragt. Somit realisiert man z.B. später eine Blätterfunktion.

Natürlich kann man auch alle Funktionen verbinden:
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'Nils'
AND id < '20' ORDER BY url, id DESC LIMIT 10,5";
?>
Dies würde den Datensätze ausgeben, in denen als name Nils steht und die id kleiner ist als 20.
Die Abfrage wird dann bei url alphabetisch sortiert (a,b,c) und die id absteigend sortiert (3,2,1).
Anschließend werden nur 5 Datensätze vom 10. ab ausgegeben.

Die Ausgabe könnte so aussehen:
18 | www.ab.de
11 | www.ab.de
15 | www.ac.de
12 | www.ac.de
19 | www.ad.de
Davor entsprachen die Datensätze 1 bis 9 auch den Kriterien, wurden aber durch das LIMIT nicht ausgegeben.

Aber Achtung, die Reihenfolge der einzelnen Attribute dürfen nicht willkürlich sein. Zuerst muss dort SELECT * FROM tabelle stehen.
Als nächstes kommt WHERE mit den Kriterien. Danach kommt ORDER BY mit den genaueren Bestimmungen zu Ausgabe. Zum Schluss kommt LIMIT.

Abfrage auf der ganzen Seite benutzen
Möchte man die Abfrage einer Tabelle auf der ganzen Seite benutzen (z.B. fürs Design), könnte man die Seite in die While-Schleife schreiben, das wäre aber sehr umständlich. Es geht auch einfacher.
Wenn wir nur 1 Wert als Ausgabe haben, dann kann die while-Schleife auch entfallen.
<?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

echo "$row->url";

?>
Damit wir nur 1 Wert erhalten, können wir uns die Eigenschaft des id Feldes zu Nutzen machen, denn es gibt nur ein Feld in der Tabelle, das den Wert 1 enthält. Dies haben wir durch den Primary (Primärschlüssel) erreicht.
Man könnte auch LIMIT benutzen.

<?php
$abfrage = "SELECT * FROM links LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

echo "$row->url";

?>
Achtung: Sobald mehr als 1 Datensatz gefunden wurde, erhalten wir Fehler bei der Ausgabe.

Oft möchte man ja auch, das der PHP Script Daten hinzufügt.

Autor Andavos

News

Forum

Newsletter


© PHP-Einfach.de 2003 - 2007