phpbar.de logo

Mailinglisten-Archive

Re: Mehrtabellenabfrage
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Mehrtabellenabfrage



Peter Muessig-Trapp wrote:
> 
> Moin, moin!
> 
> Ich muss eine Mehrtabellenabfrage realisieren, von der ich
> dachte, sie sei einfach, ich kriegs aber nich hin :'-(
> 
> Ich habe folgende Tabellenstruktur:
> 
> Tab1: aktivitaet (Haupttabelle)
> 
>  id  stufa1 stufa2 stufa3  vorname  name   hobby .... usw usw
> laengliche Tabelle
>  33   250    430            Karl    Holz    04
>  34   120                   Olga    Holz    03
>  35                         Ralf    Stroh   01
>  36   240                   Hans    Stahl
> ...
> 
> (es koennen also NULL-Werte in der Tabelle stehen)
> 
> Weiter habe ich diverse Schluesseltabellen:
> 
> Tab2: stufa (Schluesseltabelle)
> 
> schluessel     name
>   120        Ingenieur
>   240        Mathematik
>   250        Informatik
>   430        Sozialwiss
> ...
> 
> Tab3: hobby (Schluesseltabelle)
> 
> schluessel     name
>    01        Disco gehen
>    02        Buecher lesen
>    03        viel Essen
>    04        lang schlafen
> 
> Ein  SELECT soll mir folgendes Ergebnis produzieren:
> 
> 33, 'Mathematik', 'Sozialwiss', '' , 'Karl', 'Holz', 'lang schlafen',
> ... usw
> 
> ... und so hab ichs versucht, abers funxt nur, wenn keine
>     Zellen NULL enthalten :(
> 
>         select
> a.id,
> s1.name,
> s2.name,
> s3.name,
> a.vorname,
> a.name,
> h.name
> 
>         from
> 
> aktivitaet a,
> stufa s1, stufa s2, stufa s3,
> hobby h
> 
>         where
> 
> a.stufa1 = s1.schluessel and
> a.stufa2 = s2.schluessel and
> a.stufa3 = s3.schluessel and
> a.hobby = h.schluessel and
> 
> i.id =33
> 
> Jemand Ideen?
> Oder sollte ich die Tabellenstruktur anders machen?
> 
> Gruesse aus Hannover, Peter

Hallo Peter

Die Tabellenstruktur ist absolut OK.

Um die NULL Werte auch zu bekommen, musst Du lediglich LEFT JOIN's statt der normalen Join's verwenden:
SELECT
	a.id
	, IFNULL( s1.name, '' )
	, IFNULL( s2.name, '' )
	, IFNULL( s3.name, '' )
	, a.vorname
	, a.name
	, IFNULL( h.name, 'Keine Hobbies :)' )
FROM
	aktivitaet AS a
	LEFT JOIN stufa AS s1
	LEFT JOIN stufa AS s2
	LEFT JOIN stufa AS s3
	LEFT JOIN hobby AS h
WHERE
	a.stufa1 = s1.schluessel
	AND a.stufa2 = s2.schluessel
	AND a.stufa3 = s3.schluessel
	AND a.hobby = h.schluessel
	AND a.id = 33

Die IFNULL()'s habe ich nur eingebaut, damit Du Leerstrings statt NULL Werte zurueckbekommst.

Tschau
Christian


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive