mySQL Anweisungen

mysql_query()
Der Funktion mysql_query() wird ein zuvor definierter Verbindungsstring als erstes Argument und die Verbindungs-ID als zweites, optionales Argument übergeben. Im zweiten Beispiel wird bei SELECT FROM nur noch der Tabellename eingefügt, da zuvor mittels mysql_select_db() die gewünschte Datenbank ausgewählt wird.

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
$SQLString = "SELECT * FROM meinShop.artikel";
$Ergebnis = mysql_query($SQLString, $Verbindung);
?>

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
mysql_select_db("meinShop");
$SQLString = "SELECT * FROM artikel";
$Ergebnis = mysql_query($SQLString, $Verbindung);
?>

mysql_db_query()
Diese Funktion ist einfacher zu lesen denn sie arbeitet mit 3 Argumenten, wobei das dritte, die Verbindungs-ID wieder optional ist. Der erste Parameter ist die gewünschte Datenbank, der zweite der Verbindungssting, welcher die Tabelle enthält.

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
$SQLString = "SELECT * FROM Artikel";
$Ergebnis = mysql_db_query("meinShop", $SQLString, $Verbindung);
?>

Rückgabewerte

Daten bearbeiten

Hier werden nun Datensätze mittels INSERT-, UPDATE-, oder DELETE- eingefügt, geändert oder gelöscht. Die folgende Anweisung ist sehr einfach, aber noch nicht optimal. Auf der vorigen Seite wurde eine Datenbank meinShop mit einer Tabelle Artikel und ein paar Feldern erzeugt. Mittels INSERT INTO werden hier die Werte für einen Datensatz (Zeile) eingetragen. Da das Feld ArtikelNr als Primärschlüssel dient, muss das Script noch erweitert werden.

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
$SQLString = "INSERT INTO Artikel (ArtikelNr, Artikelname, Artikelgruppe, Preis) VALUES (16, 'Neuer Artikel', 'Sonstiges', 123.5)";
$Ergebnis = mysql_db_query("meinShop", $SQLString, $Verbindung);
echo $Ergebnis;
?>

Hier wird nun das Script um einige Kontrollen und einen durchlaufenden Primärschlüssel erweitert. Ich will hier nicht auf die ziemlich komplizierte Verschachtelung der if-else Struktur eingehen, sondern nur ein paar Anweisungen erläutern.
In der ersten Variable $SQLString wird der höchste Wert des Feldes ArtikelNr der Tabelle Artikel übergeben, und anschließend, wird der Zeiger mittels mysql_db_query auf dieses Feld gesetzt. Anschließend wird unter mysql_result dieser Wert mit 1 addiert und an die Variable $neueNr übergeben. Diese $neueNr wird dann als neue $ArtikelNr mittels INSERT INTO eingegeben.

<?php

$Verbindung = @mysql_connect ("localhost", "pastor", "pixel");
$SQLString = "SELECT max(ArtikelNr) FROM Artikel";

if($Verbindung){
$Ergebnis = mysql_db_query("meinShop", $SQLString, $Verbindung);


if($Ergebnis){
$neueNr = mysql_result($Ergebnis, 0)+1;
$SQLString = "INSERT INTO Artikel (ArtikelNr, Artikelname, Artikelgruppe, Preis) VALUES ($neueNr, 'Neuer Artikel', 'Sonstiges', 123.5)";
$Ergebnis = mysql_db_query("meinShop", $SQLString, $Verbindung);
if($Ergebnis){
echo "ok";
}
else{
echo "Fehler";
}
}
else{
echo "Fehler2";
}

}
else{
echo "Fehler3";
}

?>

Datumswerte in Tabellen

Das Datum muss im Format YYMMDD bzw. YYYYMMDD vorliegen also:
021230
20021230

Die Anweisung kann also lauten
$SQLString = "INSERT INTO Artikel (ArtikelNr, Datum)
VALUES (20,20021230)";

Will man Trennzeichen einsetzen, muss das Datum in einfachen Anführungszeichen gesetzt werden.
$SQLString = "INSERT INTO Artikel (ArtikelNr, Datum)
VALUES (20, '2002.12.30')";

Mit der date() Funktion erhält man ein aktuelles Systemdatum. Dieses muss dem mySQL entsprechendem Format erscheinen. Die Variable muss in einfachen Anführungsstrichen eingefügt werden.
$Datum = date("Y-m-d");
$SQLString = "INSERT INTO Artikel (ArtikelNr, Datum)
VALUES (20, '$Datum')";

Datensätze bearbeiten UPDATE

Die Anweisung UPDATE kann mehrere Datensätze und Felder ändern. Im folgenden Beispiel werden in der Tabelle Artikel alle Preise der Artikelgruppe Birnen geändert.

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
$SQLString = "UPDATE Artikel SET Preis=20.45 WHERE Artikelgruppe ='Birnen' ";
$Ergebnis = mysql_db_query("meinShop", $SQLString, $Verbindung);
echo "Geänderte Datensätze: ",mysql_affected_rows($Verbindung);
?>

Will man mehrere Felder gleichzeitig ändern, muss man die Anweisungen durch Kommata voneinander trennen. Im folgenden Beispiel wird in allen Datensätzen der Artikelgruppe "Kirschen" vorkommt, diese durch Artikelgruppe "Äpfel" ersetzt, der Preis geändert und ein Datum gesetzt.

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
$SQLString = "UPDATE Artikel SET Preis=20.45,
Artikelgruppe 'Äpfel',
Datum ='2001-12-15',
WHERE Artikelgruppe ='Kirschen' ";
$Ergebnis = mysql_db_query("meinShop", $SQLString, $Verbindung);
echo "Geänderte Datensätze: ",mysql_affected_rows($Verbindung);
?>

Strings werden in Anführungszeichen gesetzt, bzw. in einfache Anführungszeichen, da sie verschachtelt sind. Die Zahlenwerte (integer) bekommen keine Anführungszeichen.
In der WHERE Klausel wird die Bedingung definiert, ob ein Datensatz geändert wird oder nicht.
Der Primärschlüssel sollte nicht geändert werden.

Datensätze löschen DELETE

Auch mit dieser Anweisung kann man mehrere oder alle Datensätze löschen. Auch hier wird wieder eine Bedingung in der WHERE Klausel definiert. In diesem Fall werden alle Datensätze der Artikelgruppe "Birnen" gelöscht.

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
$SQLString = "DELETE FROM Artikel
WHERE Artikelgruppe ='Birnen' ";
$Ergebnis = mysql_db_query("meinShop", $SQLString, $Verbindung);
echo "Geänderte Datensätze: ",mysql_affected_rows($Verbindung);
?>

Daten abfragen und ausgeben

Hier gibt es viele Möglichkeiten, es folgt eine einfache Anweisung. In mysql_result() werden 3 Argumente erwartet.
mysql_result(Ergebnis-ID, Zeile, Spalte)
Lässt man das dritte Argument weg, wird die erste Spalte angezeigt. Erste Zeile oder Spalte beginnt mit 0.

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
$SQLString = "SELECT * FROM Artikel";
$Ergebnis = mysql_db_query("meinShop", $SQLString, $Verbindung);
echo mysql_result($Ergebnis, 0);
echo "/";
echo mysql_result($Ergebnis, 0, 1);
echo "/";
echo mysql_result($Ergebnis, 0, "Artikelgruppe");
echo "/";
echo mysql_result($Ergebnis, 0, "Preis");
echo "<br>";
echo "<br>";
echo mysql_result($Ergebnis, 1);
echo "<br>";
echo mysql_result($Ergebnis, 1, 1);
echo "<br>";
echo mysql_result($Ergebnis, 1, "Artikelgruppe");
echo "<br>";
echo mysql_result($Ergebnis, 1, "Preis");
?>

Hier nochmal das Gleiche auf andere Weise. Ich habe hier in den ersten 3 Zeilen das Script eingefügt, welches in der Dokumentation von Strato vorgeschlagen wird (mit andern Zugangsdaten). Anschließend wird der String in mysql_query() eingefügt.

<?php
$Verbindung = mysql_connect ("localhost", "pastor", "pixel");
$query = "use meinShop";
if (!mysql_query($query, $Verbindung)) die("Datenbank existiert nicht.\n");

$SQLString = "SELECT * FROM Artikel";

$Ergebnis = mysql_query($SQLString);

echo mysql_result($Ergebnis, 0)," / ";
echo mysql_result($Ergebnis, 0, 1)," / ";
echo mysql_result($Ergebnis, 0, "Artikelgruppe")," / ";
echo mysql_result($Ergebnis, 0, "Preis")," / ";
echo "<br>";
echo "<br>";
echo mysql_result($Ergebnis, 1)," / ";
echo mysql_result($Ergebnis, 1, 1)," / ";
echo mysql_result($Ergebnis, 1, "Artikelgruppe")," / ";
echo mysql_result($Ergebnis, 1, "Preis")," / ";
?>

Die wichtigsten mySQL Befehle im Überblick

CREATE DATABASE datenbankname Datenbank anlegen
CREATE TABLE Tabellenname() Tabelle anlegen

CREATE TABLE Tabellename(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
feldname1 VARCHAR(25)
)

Tabelle incl. Felder. Die Felder gefolgt von ihrem Datentyp werden durch Kommata getrennt.

INSERT INTO Tabellenname(feld1,feld2, feld3)
VALUES('wertFeld1', 'wertFeld2', 'wertFeld3')

Daten eintragen, in der ersten Klammer gebe die Feldnamen ein, die aktualisiert werden sollen, in der VALUES() Klammer gebe in der gleichen Reihenfolge die Werte in einfachen Anführungstrichen für die Felder ein
UPDATE Tabellenname SET feld1='neuer Wert', feld2='neuer Wert' WHERE id=3 Aktualisierung. Führe Feldnamen und neue Werte auf und bestimme unter WHERE den gewünschten Datensatz am Besten mit dem Primärschlüsselfeld
DELETE FROM Tabellenname WHERE id=3 Datensatz löschen
DROP TABLE Tabellenname gesamte Tabelle löschen
SELECT siehe auch http://dev.mysql.com/doc/refman/4.0/de/select.html
SELECT * FROM Tabellenname alle Datensätze ausgeben durch *
SELECT feld1, feld3 FROM Tabellenname bestimmte Spalten ausgeben
SELECT * FROM Tabellenname ORDER BY feld1 die Tabelle wird nach feld1 geordnet
SELECT * FROM Tabellenname ORDER BY feld1 DESC die Tabelle wird absteigend geordnet
SELECT * FROM Tabellenname ORDER BY feld1, feld2 die Tabelle wird erst nach feld1 dann nach feld2 geordnet (bei doppelten Werten)
SELECT * FROM Tabellenname WHERE feld2='Gemüse' Filter. Nur die Datensätze werden ausgegeben, die den Wert "Gemüse" in feld2 haben.
SELECT * FROM Tabellenname WHERE feld2='Gemüse' AND feld3<20 Datensätze in denen beide Bedingungen erfüllt sind, werden ausgegeben
SELECT * FROM Tabellenname WHERE feld2='Gemüse' OR feld2='Obst' alle Datensätze die Gemüse oder Obst sind
SELECT * FROM Tabellenname WHERE feld2 BETWEEN plz1 AND plz2 alle Datensätze in feld2 die zwischen plz1 und plz2 liegen
SELECT * FROM Tabellenname WHERE feld2 LIKE '%Berlin%' liefert alle Datensätze, bei denen in feld2 Berlin vorkommt, also auch Berlin-Spandau etc.
SELECT * FROM Tabellenname WHERE feld2 IN ('wert1', 'wert2', 'wert3') liefert alle Datensätze, wenn feld2 einen Wert hat, der in der IN-Liste enthalten ist (INT Werte ohne Anführungszeichen)
weitere Vergleichsoperatoren siehe bei http://dev.mysql.com
 

SELECT fragen.id, fragen.Frage, fragen.Antwort, bereiche.Bereich
FROM fragen LEFT JOIN bereiche
ON fragen.Bereich=bereiche.ID

Diese Anweisung gehört natürlich in eine Zeile ohne Zeilenumbruch.

Sinn der Übung. In der Tabelle fragen.Bereich werden Zahlen eingegeben. In der Tabelle bereiche.Bereich werden die entsprechenden Bezeichnungen eingegeben. Durch die Verknüpfung werden die Bezeichnungen aus Tabelle bereiche.bereich angezeigt anstatt der Zahlenwerte von fragen.Bereich. Will man eine Bezeichnung ändern, braucht man das nur einmal in Tabelle bereiche machen.

Felder verknüpfen
Hier werden zuerst die Felder beider Tabellen ermittelt. Mittels Punktoperator ist die Zuweisung eindeutig. Nach FROM kommt die Haupttabelle. Die links vom Befehl LEFT JOIN stehende Tabelle wird komplett ausgelesen. Bei der zweiten Tabelle werden nur die Daten ausgelesen, die mit der ersten Tabelle verknüpft werden können. Mittels ON werden die dort definierten Felder verglichen.

SELECT f.id, f.Frage, f.Antwort
FROM fragen f

anderes Beispiel

SELECT f.id, f.Frage, f.Antwort, b.Bereich
FROM fragen f LEFT JOIN bereiche b
ON f.Bereich=b.ID

 

Abkürzung, um sich die Schreibarbeit etwas zu vereinfachen
SELECT warenkorb.id, warenkorb.Anzahl, warenkorb.Einzelpreis, warenkorb.Anzahl * warenkorb.Einzelpreis AS GPreis,
FROM warenkorb
Neues Feld durch mathematische Gleichung. Hier wird eine neues Feld GPreis erzeugt, welches durch Addition von warenkorb.Anzahl mal warenkorb.Einzelpreis erzeugt wird.

mySQL Dreamweaver