• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Join aus zwei Spalten

Tanja

Neues Mitglied
Ich habe in einer Datenbank eine Tabelle mit Hunden, in der (männliche und weibliche) mit allen Gesundheitsdaten (z.B. HD) hinterlegt sind. Jedes Tier hat dadurch eine eindeutige ID. In einer zweiten Tabelle sind Verpaarungen angegeben, diese können Hunde aus der ersten Tabellen beinhalten (müsssen aber nicht). In der zweiten Tabelle weise ich dem männlichen Tier die ID aus der ersten Tabelle zu (soweit vorhanden) und bei dem weiblichen mache ich das gleiche. Ergo habe ich drei Spalten, die die ID beinhalten: In Hund die Spalte ID, in Welpen die Spalten male_id und female_id.
Füge ich die Tabellen über join zusammen, holt er mir entweder den zugehörigen Wert für das männliche Tier oder den Wert für das weibliche Tier.
Code:
$notborn = mysql_query("SELECT Vater, id_male, Mutter, id_female, kennel, puppy.Landkuerzel, erwartet, sollgeboren, sollabgabe, geboren, istabgabe, geborenmale, geborenfemale, abgebenmale,abgebenfemale, Kontakt, email, dog.id, Körcode, Auswertung_HD, Auswertung_ED, Degenerative_Myelopathie, Hypophysärer_Zwergwuchs, Maligne_Hyperthermie, aktuelle_Augenuntersuchung
FROM puppy 
LEFT JOIN dog ON puppy.id_male = dog.id OR puppy.id_female = dog.id
WHERE sollgeboren > NOW() ORDER BY sollgeboren ASC");
while ($data = mysql_fetch_assoc($notborn))
alles bis zur dog.id kommt aus der Tabelle puppy (Verpaarung), alles danach aus der dog (Hunde).
Wenn ich jetzt z.B. die Auswertung_HD ausgebe, erhalte ich den Wert der Hündin (letzte join-Anweisung). Ich benötige aber beide Auswertungen, weiß aber nicht wie ich die Abfrage dann gestalten muss das ich z.B. Auswertung_HDmale und Auswertung_HDfemale erhalte.
Ist meine erste Datenbank, also bitte ein wenig Nachsicht :oops:
Habe schon versucht die SELECT-Anweisung zu verschachteln aber scheinbar kann ich das nicht, die Anzeige hat nur Fehlermeldungen.
Bitte um Schubser in die richtige Richtung...
 
Werbung:
naja du könntest einfach nur die id_male joinen und die id_female in die WHERE klausel packen

Code:
SELECT (diverse attroibute hier ausgelassen) 
FROM puppy  
LEFT JOIN dog ON puppy.id_male = dog.id 
WHERE puppy.id_female = dog.id AND sollgeboren > NOW() ORDER BY sollgeboren ASC
 
Zuletzt bearbeitet:
Das ergibt bei mir eine völlig leere Ausgabe ohne Fehlermeldungen.
Und würde ich auch nicht so nur die suchen, wo die female eine id hat?
Ich weiß nicht, ob es richtig mit rübergekommen ist, aber die Hunde aus der Verpaarungen (puppy) können in der dog sein, müssen aber nicht. Im Grunde möchte ich nur bei der Verpaarungsseite auch die Gesundheits-Dinger zu den Hunden haben (sofern vorhanden)...
 
Werbung:
gelöst :D

Code:
$notborn = mysql_query("
SELECT Vater, id_male, Mutter, id_female, kennel, puppy.Landkuerzel, erwartet, sollgeboren, sollabgabe, geboren, istabgabe, geborenmale, geborenfemale, abgebenmale,abgebenfemale, Kontakt, email,  
dog1.Körcode AS Körmale, dog1.Auswertung_HD AS HDmale, dog1.Auswertung_ED AS EDmale, dog1.Degenerative_Myelopathie AS DMmale, dog1.Hypophysärer_Zwergwuchs AS HZmale, 
dog1.Maligne_Hyperthermie AS MHmale, dog1.aktuelle_Augenuntersuchung AS Augenmale,
dog2.Körcode, dog2.Auswertung_HD, dog2.Auswertung_ED, dog2.Degenerative_Myelopathie, dog2.Hypophysärer_Zwergwuchs, 
dog2.Maligne_Hyperthermie, dog2.aktuelle_Augenuntersuchung
FROM puppy  
LEFT JOIN dog AS dog1 ON puppy.id_male = dog1.id  
LEFT JOIN dog AS dog2 ON puppy.id_female = dog2.id  
WHERE sollgeboren > NOW() ORDER BY sollgeboren ASC");
in den Join jeweils ein AS zuweisen
Code:
LEFT JOIN dog AS dog1 und LEFT JOIN dog AS dog2
und in der Abfrage auch (so das diese dann auch "doppelt" abgefragt werden können) und für die einzelnen Spalten auch, also
Code:
anstelle von Auswertung_HD
einmal dog1.Auswertung_HD AS HDmale
und dog2.Auswertung_ED

Sorry für den Doppelpost, aber mit Edit kam ich nicht auf die Code Felder (die ich im nachhinein auch per Hand hätte einfügen können)
 
Zurück
Oben