Frage zu zwei Tabellen zusammen....

Scorp1337

Erfahrenes Mitglied
Hiho leuts...
ich hab folgende 2 Tabellen:

Code:
lieferantenplan
 ID | montag | dienstag | mittwoch | donnerstag | freitag
-------------------------------------------------------------------------------
1    |   3    |   14	 |    3    |     5     |    14

lieferant
 ID |      name
--------------------
 3  |  PizzaExpress
 4  |  Subway
 5  |  ItalienerBla
14  |  ChinesenLaden
Jetzt möchte ich für jeden Tag den Lieferantennamen erfragen... Wie mach ich das richtig?
...bin bis jetzt soweit gekommen was natürlich nicht funktioniert =/

...ist lange her, dass ich mit SQL gearbeitet hab.

Code:
SELECT  A.montag AS a,
        A.dienstag AS b,
        A.mittwoch AS c,
	A.donnerstag AS d,
	A.freitag AS e
FROM lieferantenplan AS A
ON lieferant AS B
WHERE (A.ID = $i) AND A.ID = B.Name
 
Hier mal als erster Versuch
Wirst ja sehen was bei rauskommt :D

PHP:
SELECT  A.montag AS a,
        A.dienstag AS b,
        A.mittwoch AS c,
        A.donnerstag AS d,
        A.freitag AS e,
       B.name
FROM lieferantenplan AS A
   INNER JOIN lieferant AS B
ON A.montag = B.ID
AND A.dienstag = B.ID
usw...
 
Es kam genau so viel bei raus: " "^^

Code:
	       SELECT  A.montag AS a,
		        A.dienstag AS b,
		        A.mittwoch AS c,
		        A.donnerstag AS d,
		        A.freitag AS e,
		        B.name
		FROM lieferantenplan AS A
		INNER JOIN lieferant AS B
		ON 	   A.montag = B.ID
		   AND A.dienstag = B.ID
		   AND A.mittwoch = B.ID 
		   AND A.donnerstag = B.ID
		   AND A.freitag = B.ID
Ich frag mich nur gerade ob das Ganze überhaupt möglich ist.
Übrigends handelt es sich hierbei um Ms SQL und ich wollte gerne ein fetch_array nutzen, da eine weitere Schleife ziemliche Verschachtelung bedeuten würde, was weitere If-Abfragen bedeuten würde... usw.
Deshalb das fetch_array um später einfach mit $row['a'] den Lieferanten für Montag zu kriegen usw.

Gruß Scorp
 
Moin djscorpion,

zwei Ansätze
a) Ansatz über 5 Left Joins von fünf Feldern (Wochentagen) jeweils auf Lieferant.Id
Code:
Select A.id,
B1.name as Montag,
B2.Name as Dienstag,
B3.name as Mittwoch,
B4.name as Donnerstach,
B5.name as Freitag
from Lieferantenplan as A
LEFT JOIN lieferant B1 on A.Montag = B1.Id
LEFT JOIN lieferant B2 on A.Dienstag = B2.Id
LEFT JOIN lieferant B3 on A.Mittwoch = B3.Id
LEFT JOIN lieferant B4 on A.Donnerstag = B4.Id
LEFT JOIN lieferant B5 on A.Freitag = B5.Id
order by A.Id

b) über einen UNION
Code:
Select  A..Id, A.Tag, B.Name as LiefName from lieferantenplan B,
(Select A1.id , 1 as sortfeld, 'Mo'  as Tag, A1.Montag as Liefid from lieferantenplan A1
UNION ALL 
Select A2.id , 2, 'Di'  , A2.Dienstag as Liefid from lieferantenplan A2
UNION ALL 
Select A3.id , 3, 'Mi' , A3.Mittwoch as Liefid from lieferantenplan A3
UNION ALL 
Select A4.id , 4, 'Do' , A4.Donnerstag as Liefid from lieferantenplan A4
UNION ALL 
Select A5.id , 5, Fr', A5.Freitag as Liefid from lieferantenplan A5
) as A

WHERE A.LiefID = B.ID
ORDER By A.ID, A.sortfeld
[nicht getestet]

Wird allerdings beides bestenfalls so schnell sein wie meine selige Tante Gerda.

Grüße
Biber
 
Zuletzt bearbeitet:
Also ich zeig euch mal meine fertige abfrage:

Code:
Select 	A.id,
		B1.name as MoName,
		B2.name as DiName,
		B3.name as MiName,
		B4.name as DoName,
		B5.name as FrName,
		B1.speisekarte as MoSpeisekarte,
		B2.speisekarte as DiSpeisekarte,
		B3.speisekarte as MiSpeisekarte,
		B4.speisekarte as DoSpeisekarte,
		B5.speisekarte as FrSpeisekarte,
		B1.homepage as MoHomepage,
		B2.homepage as DiHomepage,
		B3.homepage as MiHomepage,
		B4.homepage as DoHomepage,
		B5.homepage as FrHomepage
FROM 	lieferantenplan as A
		LEFT JOIN lieferant B1 on A.Montag = B1.Id
		LEFT JOIN lieferant B2 on A.Dienstag = B2.Id
		LEFT JOIN lieferant B3 on A.Mittwoch = B3.Id
		LEFT JOIN lieferant B4 on A.Donnerstag = B4.Id
		LEFT JOIN lieferant B5 on A.Freitag = B5.Id
WHERE 	(A.ID = $i)
ORDER BY A.Id

Gehts nicht weniger umständlich^^?
 
Zurück