2017-01-16 5 views
-1

Zum Experimentieren erstelle ich ein Skript, das entworfen wurde, um Flugverbindungen mit PHP & mysql zu finden.PHP MYSQL Abfrage, Suche nach Verbindungen

Ich habe eine Datenbank „Zeitpläne“ ähnlich wie im folgenden genannt:

dep_airport, arr_airport, flt_num 

LHR JFK 100, 
LHR FRA 200, 
JFK MIA 300 

Nehmen wir an, jemand will von LHR nach MIA fliegen. Sie müssten sich in JFK verbinden, also nehmen Sie die Flüge 100 LHR - JFK, und wechseln Sie dann zum Flug 300 JFK - MIA.

Wenn ich eine Abfrage:

SELECT * FROM schedules WHERE dep_airport = 'LHR' AND arr_airport = 'MIA' 

Die Abfrage wird null zurück, da es keine direkte Verbindung. Wie kann ich die Datenbank abfragen, um herauszufinden, in welcher Beziehung LHR - MIA existiert, aber über JFK?

+3

Sie werden zusätzliche Informationen benötigen, da es hier nicht genug gibt, um eine ..... Warte auf ..... Verbindung zu machen. –

+2

Bist du das Barney? – GurV

+0

@JayBlanchard wie in "Anschlussflüge"? ;-) –

Antwort

0

Damit es wirklich funktioniert, benötigen Sie mehr Informationen - Ankunfts- und Abfahrtszeiten zum Beispiel.

Wenn Sie Ihre Auswahl auf One-Stops beschränken (maximal zwei Flüge), dann findet ein einfacher SQL-Join Ihre Flüge.

SELECT * 
FROM `schedules` a 
JOIN `schedules` b 
ON a.`arr_airport` = b.`dep_airport` 
WHERE a.`dep_airport` = 'LHR' AND b.`arr_airport` = 'MIA' 

Natürlich würden Sie vor dem Ausführen dieser Abfrage nach Direktflügen suchen. Außerdem müssen Sie die Ankunfts- und Abfahrtszeiten einschränken. Real-Scheduling-Software nimmt sogar die Zeit, um von einem Gate zum anderen zu kommen, so ist es nicht nur so einfach wie die Ankunftszeit < Abfahrtszeit.

Wenn Sie auch weitere Stopps in Betracht ziehen müssen, würden Sie weitere Joins für Abfragen hinzufügen, die danach ausgeführt werden.

Es ist auch möglich, eine Abfrage zu schreiben, die nach ganzen Pausen sucht und eine stoppt, die Sie jedoch aus Leistungsgründen vermeiden möchten.

+0

Danke. Werde es versuchen. Ich lerne immernoch. Ich habe die Datenbank für jetzt vereinfacht, werde komplexere Dinge ausprobieren, sobald ich das funktioniere :). – user3410094

1

Angesichts Ihr aktuelles Schema und die Art und Weise, dass Sie Ihre Frage in den Kommentaren zu klären Sie die Informationen unter Verwendung eines LEFT JOIN auf dem Tisch in Frage kommen könnten:

SELECT s1.* 
FROM schedules s1 
LEFT OUTER JOIN schedules s2 
ON s1.arr = s2.dep 
WHERE s1.dep = 'LHR' 
AND s2.arr = 'MIA' 

Wie in this example es zurückzugibt:

dep arr flight 
LHR JFK 100 

Hinzugefügt another example with an additional flight, um zu zeigen, wie dies am meisten grundlegende Ebene funktionieren würde. Wiederum gibt es viele unerklärte Variablen, über die in Kommentaren gefragt wurde, aber wenn Sie nur danach fragen, was mit den drei ursprünglichen Spalten gefragt wurde, dann könnte dies der Weg sein, den Sie gehen möchten.

+0

Danke für den Rat. – user3410094