php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.05.2008, 15:12  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.034
lazydog befindet sich auf einem aufstrebenden Ast
Standard Mehrfach Join

Jetzt habe ich zur Abwchslung auch mal eine Frage (die erste in fünf Jahren phpfriend.de). Ich habe, leicht vereinfacht dargestellt, die folgenden Tabellen
Code:
+------------+     +--------------------+     +-------------------+   
| PERSON     |     | PHONE_REACHABILITY |     | PHONE             |  
|------------|     |--------------------|     |-------------------+ 
| last_name  |     | phone_id           |     | phone_id          |  
| person_id  |     | person_id          |     | phone_prefix      |  
| ....       |     +--------------------+     | phone_number      | 
+------------+                                | phone_number_type | 
                                              | ....              | 
                                              +-------------------+
Mit der Abfrage
Code:
SELECT
	p.person_lastname,
	t1.phone_number business,
	t2.phone_number mobile
FROM
	person p
LEFT JOIN
	phone_reachability r1 ON p.person_id = r1.person_id 
LEFT JOIN
	phone_reachability r2 ON p.person_id = r2.person_id 
LEFT JOIN
	phone t1 ON r1.phone_id = t1.phone_id
LEFT JOIN
	phone t2 ON r2.phone_id = t2.phone_id
WHERE
	t1.phone_number_type = 1 
AND
	t2.phone_number_type = 3
AND
	p.person_id = $pid";
erhalt ich nun die Geschäftsnummer (Typ 1) und die Mobile-Nr (Typ 3). Wenn es zu einer Person aber nur die eine oder andere Nummer gibt, erhalte ich gar nichts. Kann mir jemand sagen, wie ich auch diese Nummern erhalten kann
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.05.2008, 15:38  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Ich würde mal sagen du solltest die Bedingung phone_number_type=x in die jeweilige ON-Clause setzen:

Code:
SELECT
   p.person_lastname,
   t1.phone_number business,
   t2.phone_number mobile
FROM
   person p
LEFT JOIN
   phone_reachability r1 ON p.person_id = r1.person_id
LEFT JOIN
   phone_reachability r2 ON p.person_id = r2.person_id
LEFT JOIN
   phone t1 ON r1.phone_id = t1.phone_id
AND
   t2.phone_number_type = 3
LEFT JOIN
   phone t2 ON r2.phone_id = t2.phone_id
AND
   t1.phone_number_type = 1
WHERE
   p.person_id = $pid";
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 08.05.2008, 16:09  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.034
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Das liefert mir dann
Code:
person_lastname	business	mobile
xxxxx				 NULL		 NULL
xxxxx				 NULL 		NULL
xxxxx				 NULL 		611 52 20
xxxxx				 624 22 96  NULL
xxxxx				 624 22 96  NULL
xxxxx				 624 22 96  611 52 20
xxxxx				 NULL 		NULL
xxxxx				 NULL 		NULL
xxxxx				 NULL 		611 52 20
statt
Code:
person_lastname	business	mobile
xxxxx				 624 22 96  611 52 20
wenn beide Nummern vorhanden sind.
Durch einige Tests haben wir nun herausgefunden, dass es mit Subselects funktioniert:
Code:
SELECT
	p.person_lastname,
	(
		SELECT 
			t1.phone_number
		FROM
			phone_reachability r1
		LEFT JOIN 
			phone t1 ON r1.phone_id = t1.phone_id
		WHERE
			p.person_id = r1.person_id
		AND
			t1.phone_number_type = 1
	) business,
	(
		SELECT 
			t2.phone_number
		FROM
			phone_reachability r2
		LEFT JOIN 
			phone t2 ON r2.phone_id = t2.phone_id
		WHERE
			p.person_id = r2.person_id
		AND
			t2.phone_number_type = 3
	) mobile
FROM
	person p
WHERE
	p.person_id = $pid;
Nicht besonders elegant, geht aber
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu meinem JOIN Statement Benjamin Such Datenbanken 4 12.04.2008 13:20
JOIN Problem pPanther Datenbanken 7 06.03.2008 17:26
[gelöst]LEFT JOIN, DINSTINCT und trotzdem doppelte?!?! stefanjann Datenbanken 10 06.02.2008 11:49
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
Komplexes Join Problem pPanther Datenbanken 7 03.08.2007 23:16
[solved] LEFT JOIN - #1066 - Not unique table/alias moose Datenbanken 6 12.12.2006 06:41
SQL-Frage zum JOIN micbur Datenbanken 2 16.11.2006 23:46
SQL-Abfrage evt. mit JOIN mariohaehni Datenbanken 4 07.09.2006 14:26
Join auf 2 verschiedene Felder Tommek Datenbanken 6 25.07.2006 20:39
JOIN problem 2 tabellen - zeile(tab1) zu spalte(tab2) Ministry Datenbanken 7 31.05.2006 10:31
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
INNER JOIN + Suchkriterien + Abfrage duerov PHP Tipps 2006 4 04.04.2006 12:47
inner join aus db PHP Tipps 2006 8 22.01.2006 01:23
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] Join Datenbanken 15 09.03.2005 08:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mehrfach join, sql mehrfach join, mehrfach join sql, mehrfacher join, left join mehrfach, sql join mehrfach, mehrfach joins, mehrfach left join, mehrfachjoin, join mehrfach, mehrfacher left join, sql mehrfache joins, sql mehrfachjoin, sql mehrfacher join, mehrfacher join sql, mehrfaches join, mewhrfacher join, sql mehrfach joins, mehrfache joins sql, mehrfaches left join

Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.