Ich habe zwei Tabellen, client
und application
. Im Grunde sind sie Setup wie folgt aus:MySQL SELECT mit JOIN - wie man richtig codiert
Sagen wir Tabelle client
hat 2 Datensätze (Zeilen) nur:
ID | company | street | city | country
1 Tea-Export Ltd. Wallstreet Mumbai India
2 Tea-Import Ltd. Mainstream London United Kingdom
Die Tabelle application
hat eine Zeile nur:
ID | app_num | seller | buyer
1 3002 1 2
Eine Anfrage an die Anwendung Tabelle analysiert die app_num
(3002) als Suchparameter. Und die Abfrage sollte nur mit dieser Struktur in einer Anordnung zur Folge hat:
$app_data {
[ID] => [1]
[app_num] => [3002]
seller {
[company] => [Tea-Export Ltd]
[street] => [Wallstreet]
[city] => [Mumbai]
[country] => [India]
}
buyer {
[company] => [Tea-Import Ltd]
[street] => [Mainstreet]
[city] => [London]
[country] => [United Kingdom]
}
}
Ich weiß, das mit einem JOIN durch eine SELECT-Anweisung erreicht werden kann. Und es gibt viele JOIN-Beispiele im Internet, aber keines, das ich studiert habe, passt direkt zu meinem Beispiel. Daher ist jede Hilfe hilfreich, um die richtige MySQL-Anweisung zu erstellen.
EDIT:
Die Lösung von Jehad Ahmad Jaghoub basicly Werke, sondern muss extented und abgeschlossen werden, um alle Adresse Spalten von seller
und buyer
wie diese zu holen:
(' SELECT
s.ID,
s.app_num,
a.company AS seller_company ,
a.street AS seller_street ,
a.house_num AS seller_house_num ,
a.postal_code AS seller_postal_code ,
a.city AS seller_city ,
a.country AS seller_country ,
b.company AS buyer_company ,
b.street AS buyer_street,
b.postal_code AS buyer_postal_code ,
b.city AS buyer_city ,
b.country AS buyer_country
FROM `application` AS s
LEFT JOIN clients AS a ON s.seller = a.id
LEFT JOIN clients AS b ON s.buyer = b.id
WHERE s.app_num = :app_num');
$app_data {
[ID] => [1]
[app_num] => [3002]
[seller_company] => [Tea-Export Ltd]
[seller_street] => [Wallstreet]
[seller_house_num] => [45a]
[seller_postal_code] => [400036]
[seller_city] => [Mumbai]
[seller_country] => [India]
[buyer_company] => [Tea-Import Ltd]
[buyer_street] => [Mainstreet]
[buyer_house_num] => [345]
[buyer_postal_code] => []
[buyer_city] => [London]
[buyer_country] => [United Kingdom]
}
Aber es ist verdammt viel von Code, weil man jede Spalte einzeln auswählen muss. Auch wird es in meinem Fall komplizierter, da die Länderspalte eigentlich eine andere ID (country_id) ist, die auf eine separate Landtabelle verweist, die zwei weitere JOIN für Verkäufer und Käufer enthält. UND es gibt nicht nur Verkäufer und Käufer, sondern auch Agenten- und Empfängerspalten, die ich der Einfachheit halber weggelassen habe. Es produziert auch nur ein eindimensionales Array. Gibt es also einfachere Lösungen, um auch ein mehrdimensionales Array zu erhalten, wie in meinem obigen Beispiel?
Sie müssen mit der gleichen Tabelle zweimal mit verschiedenen Aliasen JOIN. – Maximus2012
Können Sie Ihre Frage mit der aktuellen Abfrage aktualisieren, die Sie haben? – Maximus2012