aktuelle.kurse/oldies/m133/Modul_Unterlagen_133_VOR/01-Modulinhalte/02 Grundlagen/03 PHP-einfach/einf_mysql_weitere_abfragen.php.htm

411 lines
16 KiB
HTML
Raw Normal View History

2022-02-24 09:37:43 +01:00
<html>
<head>
<title>PHP-Einfach.de - MySQL Einf&uuml;hrung - Weitere Abfragen</title>
<meta name="Author" content="Andavos">
<meta name="Publisher" content="Andavos">
<meta name="Copyright" content="Andavos">
<link rel="stylesheet" href="css/main.css" tppabs="http://www.php-einfach.de/offline/css/main.css" type="text/css">
</head>
<body text="#000000" bgcolor="#DDDDDD" link="#004A95" alink="#004A95" vlink="#525252">
<table align="center" height="100%" width="100%" cellspacing="0" border="0" cellpadding="0">
<tr>
<td align="center" valign="middle" height="100%" width="100%">
<table height="100" width="750" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" bgcolor="#FFE09F" width="750"><img src="grafiken/banner_top.jpg" tppabs="http://www.php-einfach.de/offline/grafiken/banner_top.jpg" width="750" height="100" border="0" alt="">
<a name="oben"></a></td>
</tr>
</table>
<table height="650" width="750" cellspacing="0" border="0" cellpadding="0">
<tr>
<td valign="top" bgcolor="#FFE09F" width="160">
<table width="160" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="5"></td>
<td class="black" height="100" width="150">
<br><b><center><img src="grafiken/side_navigation.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_navigation.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" class="blue" href="http://www.php-einfach.de/index.php"><b>&raquo;</b> Startseite</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_news.php"><b>&raquo;</b> News&uuml;bersicht</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_email.php"><b>&raquo;</b> Kontakt</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_impressum.php"><b>&raquo;</b> Impressum</a><br><br>
<center><img src="grafiken/side_community.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_community.gif" width="150" height="25" border="0" alt=""></center>
<a target="_blank" class="blue" target="_blank" href="http://forum.php-einfach.de/"><b>&raquo;</b> Forum</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_gaestebuch.php"><b>&raquo;</b> G&auml;stebuch</a><br><br>
<center><img src="grafiken/side_tutorials.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_tutorials.gif" width="150" height="25" border="0" alt=""></center>
<a class="blue" href="einf_php.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php.php"><b>&raquo;</b> Einf&uuml;hrung PHP</a><br>
<a class="blue" href="einf_mysql.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql.php"><b>&raquo;</b> Einf&uuml;hrung MySQL</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_anfang.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_anfang.php"><b>&raquo;</b> Anfang</a><br>
<div style="position: relative; left:15;" ><a class="blue" href="einf_mysql_tabellen_spalten.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_tabellen_spalten.php"><b>&raquo;</b> Tabellen & Spalten</a><br></div>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_tabellen_fuellen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_tabellen_fuellen.php"><b>&raquo;</b> Tabellen f&uuml;llen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_verbindung_aufbauen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_verbindung_aufbauen.php"><b>&raquo;</b> Verbin. aufbauen</a> <br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_einfache_abfrage.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_einfache_abfrage.php"><b>&raquo;</b> Daten ausgeben</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_weitere_abfragen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_weitere_abfragen.php"><b>&raquo;</b> Weitere Abfragen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_daten_schreiben.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_daten_schreiben.php"><b>&raquo;</b> Daten hinzuf&uuml;gen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_daten_aendern.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_daten_aendern.php"><b>&raquo;</b> Daten &auml;ndern</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_daten_loeschen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_daten_loeschen.php"><b>&raquo;</b> Daten l&ouml;schen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_anzahl_zeilen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_anzahl_zeilen.php"><b>&raquo;</b> Anzahl d. Zeilen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_verbindung_beenden.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_verbindung_beenden.php"><b>&raquo;</b> Verbin. beenden</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_error_handling.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_error_handling.php"><b>&raquo;</b> MySQL-Fehler</a><br>
<br>
<br>
<center>
<a target="_blank" href="http://www.php-einfach.de/nav_verlinkung.php"><img src="grafiken/php-einfach.gif" tppabs="http://www.php-einfach.de/offline/grafiken/php-einfach.gif" width="88" height="31" border="0" alt="PHP-Einfach.de"></a><br><br>
<a target="_blank" href="http://www.digicount.de/"><b>Counterdienst:</b></a>
<a target="_blank" href="http://www.php-einfach.de/nav_digicount.php"><div>
<img src="grafiken/digicount_livedemo.jpg" tppabs="http://www.php-einfach.de/offline/grafiken/digicount_livedemo.jpg" border="0" alt="Digicount.de"><br>
<small>Unser werbefreier Counter- und Statistikdienst</small></div>
</a>
</center>
</td>
<td height="100" width="5"></td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#FFFFFF" width="430">
<table width="430" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="10"></td>
<td valign="top" class="black" height="100" width="410">
<br>
<h4>Weitere Abfragen</h4>
<h5>WHERE</h5>
Bisher haben wir immer alle Datens&auml;tze abgefragt, aber zum Gl&uuml;ck k&ouml;nnen wir auch gezielt einzelne Datens&auml;tze abfragen. Dabei &auml;ndert sich nur der Text (Wert) der Variable <b>$abfrage</b>, alles andere bleibt gleich. <br><br>
Zu erst lernen wir das Attribut <i>WHERE</i> kennen, damit fragen wir Datens&auml;tze ab, die einem oder mehreren Kriterien entsprechen.<br><br>
Die Abfrage daf&uuml;r muss so aussehen:
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
?>
</pre>
</font>
Wie ihr wisst, muss danach wieder das alte Script folgen, also so:
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo "$row->url &lt;br>";
}
?>
</pre>
</font>
Aber wie schon oben erw&auml;hnt, &auml;ndert sich nur der Text (Wert) von <i>$abfrage</i>.<br><br>
Mit dieser Abfrage w&auml;hlen wir alle Datens&auml;tze aus, welche die <i>id 1</i> haben, und nur dieser Datensatz wird dann ausgegeben.<br><br>
Wir k&ouml;nnen aber auch andere Kriterien setzen, z.B. so:
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE id != '1'";
?>
</pre>
</font>
Hiermit geben wir alle Datens&auml;tze aus, die als ID <b>nicht</b> den Wert 1 haben.<br><br>
Oder wir fragen die Datens&auml;tze ab, in denen die <i>id</i> kleiner als <i>10</i> ist
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE id &lt; '10'";
?>
</pre>
</font>
Dies geht nat&uuml;rlich auch mit gr&ouml;&szlig;er (>) aber auch mit allen anderen Operatoren die ihr von den Schleifen/if-Anweisungen her kennt.<br><br>
Wir k&ouml;nnen auch andere Spalten &uuml;berpr&uuml;fen lassen, z.B. alle Datens&auml;tze ausgeben, in denen als <b>name</b> <i>Andavos</i> angegeben wurde. Dies sieht dann so aus:
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE name
LIKE 'Andavos'";
?>
</pre>
</font>
Anstatt das Gleichheitszeichens wurde jetzt <i>LIKE</i> benutzt. Man k&ouml;nnte zwar ein Gleichheitszeichen benutzen, allerdings sollt ihr beide Varianten sehen. Man kann auch <i>NOT LIKE</i> benutzen, dies ergibt den selben Effekt wie <i>!=</i>.<br><br>
Evt. m&ouml;chte man ja auch mehrere Datens&auml;tze abfragen, daf&uuml;r gibt es das Attribut: <i>IN ()</i>
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE id IN ('1', '3')";
?>
</pre>
</font>
Dies w&uuml;rde die Datens&auml;tze 1 und 3 abfragen. Das gleiche geht auch mit Text. Nat&uuml;rlich kann man die Werte auch durch Variablen ersetzen und den Variablen dann Werte zu weisen, z.B. aus einem Formular.<br><br>
Manchmal m&ouml;chte man ja nur Datens&auml;tze abfragen, in denen der Name mit <i>A</i> anf&auml;ngt. F&uuml;r unbekannte Zeichen benutzt man in MySQL das: Prozentzeichen (<b>%</b>).
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'A%'";
?>
</pre>
</font>
Man kann das Prozentzeichen immer benutzen, wenn man die genaue Zeichenfolge nicht kennt, also wenn man alle Namen ausgeben m&ouml;chte, die ein <i>a</i> haben: Die Abfrage sieht so aus:
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE name LIKE '%a%'";
?>
</pre>
</font>
Man kann auch mehrere Kriterien setzen, man benutzt dazu <b>AND</b>, <b>OR</b> und <b>XOR</b>. Sie haben die gleiche Funktion wie bei einer <a href="einf_php_if-anweisung.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_if-anweisung.php">if-Anweisung</a>.
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'Nils'
AND id &lt; '10'";
?>
</pre>
</font>
Diese Abfrage w&uuml;rde alle Datens&auml;tze ausgeben die als <b>name</b> <i>Nils</i> haben und als <b>id</b> einen kleineren Wert als <i>10</i>.
<h5>ORDER BY</h5>
M&ouml;chte man die Ausgabe sortieren, z.B. so, dass der neuste Beitrag immer oben steht (daf&uuml;r kann man auch gut das id-Feld benutzen).<br>
Man kann aber auch andere Felder (z.B. das URL-Feld) sortieren lassen, z.B. alphabetisch.
<br> <br>
Hierf&uuml;r ben&ouml;tige wir <b>ORDER BY</b>
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links ORDER BY id";
?>
</pre>
</font>
Diese Abfrage w&uuml;rde die Eintr&auml;ge der id nach aufsteigend (1,2,3,4) ausgeben, wenn wir am Schluss noch ein <b>DESC</b> schreiben, wird die Ausgabe der id nach absteigend (4,3,2,1) ausgegeben.
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links ORDER BY id DESC";
?>
</pre>
</font>
Manchmal sieht man auch anstatt einem <i>DESC</i> ein <i>ASC</i>, 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.<br><br>
Wir k&ouml;nnen jetzt auch die anderen Felder sortiert ausgeben lassen
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links ORDER BY name";
?>
</pre>
</font>
Dies w&uuml;rde die Ausgabe nach der Spalte <b>name</b> alphabetisch (a,b,c,d) ausgeben. Die Angabe von <i>DESC</i> w&uuml;rde dies wieder umdrehen (d,c,b,a).<br><br>
M&ouml;chten wir f&uuml;r die Sortierung mehrere Kritieren angeben, m&uuml;ssen wir diese durch Komma trennen.
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links ORDER BY name, id DESC";
?>
</pre>
</font>
Diese Abfrage sortiert die Ausgabe erst nach dem <i>name</i> (a,b,c,d) und dann nach der <i>id</i> allerdings falsch herum (4,3,2,1).<br> <br>
<h5>LIMIT</h5>
M&ouml;chte man nur eine gewisse Anzahl von Datens&auml;tzen ausgeben, setzt man den Befehl <b>LIMIT</b> ein.<br><br>
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links LIMIT 3";
?>
</pre>
</font>
Diese Abfrage w&uuml;rde nur 3 Datens&auml;tze ausgeben, denn mit LIMIT bestimmen wir, das nur eine gewisse Anzahl von Datens&auml;tzen ausgeben wird.<br><br>
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links LIMIT 10,5";
?>
</pre>
</font>
Hiermit werden <b>5</b> Datens&auml;tze ab dem <b>10.</b> abgefragt. Somit realisiert man z.B. sp&auml;ter eine Bl&auml;tterfunktion.<br><br>
Nat&uuml;rlich kann man auch alle Funktionen verbinden:
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'Nils'
AND id &lt; '20' ORDER BY url, id DESC LIMIT 10,5";
?>
</pre>
</font>
Dies w&uuml;rde den Datens&auml;tze ausgeben, in denen als <b>name</b> <i>Nils</i> steht und die <b>id</b> kleiner ist als <i>20</i>.<br>
Die Abfrage wird dann bei <b>url</b> alphabetisch sortiert (a,b,c) und die <b>id</b> absteigend sortiert (3,2,1). <br>
Anschlie&szlig;end werden nur <b>5</b> Datens&auml;tze vom <b>10.</b> ab ausgegeben.<br><br>
Die Ausgabe k&ouml;nnte so aussehen:
<font color="#606060">
<pre>
18 | www.ab.de
11 | www.ab.de
15 | www.ac.de
12 | www.ac.de
19 | www.ad.de
</pre>
</font>
Davor entsprachen die Datens&auml;tze 1 bis 9 auch den Kriterien, wurden aber durch das <i>LIMIT</i> nicht ausgegeben.<br><br>
Aber <b>Achtung</b>, die Reihenfolge der einzelnen Attribute d&uuml;rfen nicht willk&uuml;rlich sein. Zuerst muss dort <i>SELECT * FROM tabelle</i> stehen.<br>
Als n&auml;chstes kommt <i>WHERE</i> mit den Kriterien. Danach kommt <i>ORDER BY</i> mit den genaueren Bestimmungen zu Ausgabe. Zum Schluss kommt <i>LIMIT</i>.<br><br>
<h5>Abfrage auf der ganzen Seite benutzen</h5>
M&ouml;chte man die Abfrage einer Tabelle auf der ganzen Seite benutzen (z.B. f&uuml;rs Design), k&ouml;nnte man die Seite in die While-Schleife schreiben, das w&auml;re aber sehr umst&auml;ndlich. Es geht auch einfacher. <br>
Wenn wir nur 1 Wert als Ausgabe haben, dann kann die while-Schleife auch entfallen.
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
echo "$row->url";
?>
</pre>
</font>
Damit wir nur 1 Wert erhalten, k&ouml;nnen wir uns die Eigenschaft des id Feldes zu Nutzen machen, denn es gibt nur ein Feld in der Tabelle, das den Wert <b>1</b> enth&auml;lt. Dies haben wir durch den <b>Primary</b> (Prim&auml;rschl&uuml;ssel) erreicht.<br>
Man k&ouml;nnte auch <i>LIMIT</i> benutzen.<br> <br>
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT * FROM links LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
echo "$row->url";
?>
</pre>
</font>
<b>Achtung:</b> Sobald mehr als 1 Datensatz gefunden wurde, erhalten wir Fehler bei der Ausgabe.<br><br>
Oft m&ouml;chte man ja auch, das der PHP Script <a href="einf_mysql_daten_schreiben.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_daten_schreiben.php">Daten hinzuf&uuml;gt</a>.<br><br>
<a href="http://www.php-einfach.de/nav_impressum.php">Autor Andavos</a>
<div align="center"><a href="#oben">Nach oben</a></div>
</td>
<td height="100" width="10"></td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#FFE09F" width="160">
<table width="160" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="5"></td>
<td valign="top" class="black2" height="100" width="150">
<br><b><center><img src="grafiken/side_news.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_news.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" href="http://www.php-einfach.de/nav_news.php">News</a>
<br><br>
<b><center><img src="grafiken/side_forum.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_forum.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" href="http://forum.php-einfach.de/">Forum</a>
<br><br>
<b><center><img src="grafiken/side_newsletter.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_newsletter.gif" width="150" height="25" border="0" alt="Newsletter"></center></b>
<form target="_blank" method="post" action="http://www.php-einfach.de/clanletter/save.php">
<br> <br>
<div align="center">&copy; PHP-Einfach.de 2003 - 2007 </div>
</td>
<td height="100" width="5"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>