Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Datenbankprogrammierung  Teil von  PHP und MySQL-Zugriffe
Letztes Update: 04.09.2007 20:49:50

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

Tabellen vereinigen (UNION)




Manchmal kann es vorkommen, dass verschiedene Tabellen teilweise identisch aufgebaut sind oder Felder mit demselben Inhalt besitzen. So könnte eine Tabelle beispielsweise alle Mitglieder und eine weitere alle Interessenten für eine Mitgliedschaft enthalten, die getrennt voneinander aufgeführt werden, da für die Mitglieder teilweise andere Daten gespeichert werden als für die Interessenten.

Um solche Tabellen in einer einzigen Abfrage ausgeben zu können, müssen die Tabellen so kombiniert werden, dass jeweils Teilmengen verwendet werden. Hierfür steht ab Version 4 von MySQL der UNION-Befehl zur Verfügung. UNION fügt identische Datensätze aus verschiedenen Tabellen zu einem Datensatz zusammen und eliminiert dabei doppelte Datensätze. Die Syntax für UNION lautet:
mysql>SELECT <Feldname> FROM <Tabellenname> UNION SELECT <Feldname> FROM <Tabellenname>;

Hier ein Beispiel zur Ausgabe von Daten aus zwei Tabellen.

Tabellen – mitglieder und interessenten

CREATE TABLE IF NOT EXISTS mitglieder (
  MitgliedID int(11) NOT NULL auto_increment,
  MitgliedVorname char(40) default NULL,
  MitgliedNachname char(40) default NULL,
  Aufgabe char(40) default NULL,
  Geburtsdatum date default NULL,
  PRIMARY KEY (MitgliedID)
);

INSERT INTO mitglieder VALUES (1, 'Matthias', 'Kannengiesser', 'Leitung', '1974-11-20');
INSERT INTO mitglieder VALUES (2, 'Caroline', 'Kannengiesser', 'Leitung', '1979-01-04');
INSERT INTO mitglieder VALUES (3, 'Thomas', 'Mustermann', 'Mitglied', '1967-10-10');


CREATE TABLE IF NOT EXISTS interessenten (
  InteressentenID int(11) NOT NULL auto_increment,
  InteressentenVorname char(40) default NULL,
  InteressentenNachname char(40) default NULL,
  Geburtsdatum date default NULL,
  PRIMARY KEY (InteressentenID)
);

INSERT INTO interessenten VALUES (1, 'Manfred', 'Müller', '1990-10-02');
INSERT INTO interessenten VALUES (2, 'Tina', 'Maier', '1978-10-27');

Beispiel – Skript zur Erzeugung der Datenbank, Datenbanktabelle und Datensätze

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

// SQL-Befehl – Anlegen der Datenbank
$sql_befehl = "CREATE DATABASE IF NOT EXISTS Personen";

if ($db->query($sql_befehl)) {
  // Meldung bei erfolgreicher Erstellung der Datenbank
  echo "Datenbank erfolgreich angelegt.";
  // Datenbankwechseln (verwenden)
  //Alternative: $db->query("USE Verein");
  $db->select_db("Personen");  
} else {
  // Meldung bei fehlschlag
  echo "Datenbank konnte nicht angelegt werden!";
  exit();
}

// SQL-Befehl – Anlegen der Datenbanktabelle
$db->query("
CREATE TABLE IF NOT EXISTS mitglieder (
  MitgliedID int(11) NOT NULL auto_increment,
  MitgliedVorname char(40) default NULL,
  MitgliedNachname char(40) default NULL,
  Aufgabe char(40) default NULL,
  Geburtsdatum date default NULL,
  PRIMARY KEY (MitgliedID)
)
"
);

$db->query("
  INSERT INTO mitglieder VALUES
  (1, 'Matthias', 'Kannengiesser', 'Leitung', '1974-11-20'),
  (2, 'Caroline', 'Kannengiesser', 'Leitung', '1979-01-04'),
  (3, 'Thomas', 'Mustermann', 'Mitglied', '1967-10-10')
"
);

$db->query("
CREATE TABLE IF NOT EXISTS interessenten (
  InteressentenID int(11) NOT NULL auto_increment,
  InteressentenVorname char(40) default NULL,
  InteressentenNachname char(40) default NULL,
  Geburtsdatum date default NULL,
  PRIMARY KEY (InteressentenID)
)
");

$db->query("
  INSERT INTO interessenten VALUES
  (1, 'Manfred', 'Müller', '1990-10-02'),
  (2, 'Tina', 'Maier', '1978-10-27')
");

if ($db->query($sql_befehl)) {
  // Meldung bei erfolgreicher Erstellung der Datenbanktabelle
  echo "Datenbanktabellen erfolgreich angelegt.";  
} else {
  // Meldung bei Fehlschlag
  echo "Datenbanktabellen konnte nicht angelegt werden!";
}

// Verbindung zum Datenbankserver beenden
$db->close();

?>



Der UNION-Befehl samt Skript für die Ausgabe der Datensätze sieht wie folgt aus:

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim', 'Personen');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

// Datensatz-Ausgabe festlegen
$sql_befehl = "
SELECT
  MitgliedID,
  MitgliedVorname,
  MitgliedNachname,
  Geburtsdatum
  FROM mitglieder UNION
  SELECT
  InteressentenID,
  InteressentenVorname,
  InteressentenNachname,
  Geburtsdatum
  FROM interessenten
";

if ($resultat = $db->query($sql_befehl)) {
  // Durchlaufen der Datenbankabfrage
  while($datensatz = $resultat->fetch_array() ){
    // Datenfelder – Inhalte extrahieren und
    // als Variablen zur Verfügung stellen
    extract($datensatz);
    echo "
    <p>
    $MitgliedID<br>
    $MitgliedVorname<br>
    $MitgliedNachname<br>
    $Geburtsdatum
    </p>
  ";

  }
  // Speicher freigeben
  $resultat->close();
} else {
  // Meldung bei Fehlschlag
  echo "Zugriff fehlgeschlagen!";
}

// Verbindung zum Datenbankserver beenden
$db->close();

?>

Ausgabe
1
Matthias
Kannengiesser
1974-11-20

2
Caroline
Kannengiesser
1979-01-04

3
Thomas
Mustermann
1967-10-10

1
Manfred
Müller
1990-10-02

2
Tina
Maier
1978-10-27



 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt