2017-09-13 4 views
-1

Ich habe eine MySQL-Tabelle der Client-Informationen. Ich habe einen anderen Tisch mit Gegenständen, aus denen sie wählen können. Ich habe eine dritte Tabelle, die die Artikel auflistet, die der Kunde ausgewählt hat. Jeder Kunde kann null oder mehr Elemente auswählen.Join MySQL Tabellen unbekannter Anzahl

z.B.

Client Table: 
clientID 
clientName 
... 

Item Table: 
itemID 
itemName 

Purchase Table: 
purchaseID 
clientID 
itemID 

Ich weiß, dass ich eine Frage habe, die die Kunden alle packen und dann für jeden, eine Abfrage, die die benutzerfreundliche Namen aller Elemente greifen sie (falls vorhanden) ausgewählt.

Gibt es eine Möglichkeit, dass ich eine Abfrage schreiben kann, um die Client-Informationen und alle von ihnen ausgewählten Elemente zu erfassen? Wenn sie nur einen Gegenstand auswählen könnten, würde ich nur einen linken beitreten, aber da sie mehrere Gegenstände auswählen können, bin ich nicht sicher, wie das geht.

Mein Ziel ist es, so etwas zu haben:

Client Name | Item Name | Item Name | Item Name | ... 
John | Shoes | <empty> | <empty> 
Claire | Shoes | Socks | <empty> 
Marie | <empty> | Socks | Shirts 
+0

Konnten Sie die zwei Fragen posten, die Sie sagen, dass Sie haben? (oder dass Sie in der Lage sind zu schreiben) –

+0

Versuchen Sie den linken Join, es wird funktionieren;) –

Antwort

1

ich nicht die Frage vollständig verstehen, sondern ein Standard-Join wird wieder nur Werten entsprechen, so dass ich von den Ergebnissen übernehmen das ist, was Sie nicht wollen. Wenn Sie wie oben erwähnt den Kunden beitreten, werden alle Kunden zurückgegeben, unabhängig davon, ob sie Artikel oder Käufe haben, was dem Beispiel ähnlich ist.

SELECT 
     * 
    FROM CLIENT C 
    LEFT JOIN Purchase P ON C.clientID = P.clientID 
    JOIN Item I on I.itemID = P.itemID; 
+0

Dies ist eine Art von was ich will, außer es hat mehrere Zeilen für jeden Client. Idealerweise hätte ich gerne eine Zeile für jeden Client, und diese Zeile wird am Ende der Zeile mit itemName Feldern versehen. Wenn der Kunde also einen Artikel auswählt, hat er am Ende ein Feld mit diesem Artikel. Wenn der Kunde zwei Artikel auswählt, hat er am Ende zwei Felder, die jeden Artikel anzeigen. Ist das möglich? – user1480951

+0

Ja, verwenden Sie Gruppe für jede Spalte. –

+0

Es sollte Ihnen bereits diese Information zeigen, wenn Sie die Ergebnisse nach Namen "bestellen", wird Ihnen alles zeigen, was die Person zusammen gekauft hat. Sie könnten dann wählen, es zu gruppieren usw. –