phpbar.de logo

Mailinglisten-Archive

[php] OFF TOPIC: SQL Problem

[php] OFF TOPIC: SQL Problem

Kristian =?iso-8859-1?Q?K=F6hntopp?= kk_(at)_netuse.de
Mon, 26 Apr 1999 11:17:12 +0200


"a. otto" schrieb:
> An und für sich ist das gar nicht so schwierig, dachte 
> ich, bis ich die Datenbank gesehen habe. In der wimmelt es 
> nur so von Relationen und davon habe ich bislang noch 
> nicht allzuviel Ahnung wie ich feststellen mußte.

> Kein Problem bereitet es mir eine SQL Abfrage über Php 
> aus einer relationslosen Tabelle zu erstellen, aber für 
> das hier bin ich noch zu doof.

Dann ist der Rest doch auch nicht schwer. Du kannst eine
SQL-Anfrage über eine einzelne Tabelle erstellen, sagst Du. Dann
mußt Du Dir nur noch die relationslose Tabelle zusammenstellen,
in der Du die Frage stellen möchtest.

Alle Tabellen in SQL haben einen Schlüssel, wenn sie richtig
designed sind. Dieser Schlüssel ist immer eine eindeutige Spalte
in der Tabelle oder eine Kombination von Spalten, die
zusammengenommen eindeutig ist (zusammengesetzter Schlüssel).
Zwei Tabellen können zu einer relationslosen Tabelle
zusammengesetzt werden (ge-JOIN-ed werden), wenn eine Tabelle
Schlüsseleinträge auf eine andere Tabelle enthält, d.h. wenn der
Schlüssel einer Tabelle in einer anderen Tabelle vorkommt.

Beispiel:

create table autor (
  name varchar,
  vorname varchar,
  autor_id integer,
  primary key (autor_id)
);

create table buch (
  titel varchar,
  isbn varchar,
  autor_id integer,
  primary key (isbn)
);

Hier ist autor_id Schlüssel in der Tabelle autor. In der Tabelle
buch ist autor_id Fremdschlüssel, d.h. die Tabelle buch enthält
Verweise auf die Tabelle autor. 

In diesem Fall kannst Du beide Tabellen mittels eines JOIN zu
einer Gesamttabelle vereinigen:

select * from autor, buch where autor.autor_id = buch.autor_id;

Hier werden alle Bücher aufgelistet, die ein Autor geschrieben
hat, dabei werden die Autoren als Klartext und nicht als autor_id
ausgegeben. 

Grundsätzlich kannst Du jede Relation auflösen auf diese Weise
auflösen. Dazu mußt Du den Schlüssel in der einen Tabelle und den
dazu passenden Fremdschlüssel in der anderen Tabelle
identifizieren. Die beiden Tabellen werden dann im JOIN
aufgezählt und das Schlüssel-Fremdschlüssel-Paar wird als
Äquivalenzbedingung in die WHERE-Clause mit eingesetzt.

Bei mehr als zwei Tabellen werden die einzelnen JOIN-Bedingungen
ver-AND-ed.

Deine abschließende Selektion wird dann an diesen Term mit AND
drangehängt.

Kristian

-- 
Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH
Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00
Using PHP3? See our web development library at
http://phplib.shonline.de/ (GPL)


php::bar PHP Wiki   -   Listenarchive