2017-01-16 17 views
-1

私はPHP & mysqlを使ってフライト接続を見つけるために設計されたスクリプトを作成しています。PHP MYSQLクエリ、接続の検索

私は、次のように「スケジュール」と呼ばれるデータベースを持っている:

dep_airport, arr_airport, flt_num 

LHR JFK 100, 
LHR FRA 200, 
JFK MIA 300 

は、誰かがMIAにLHRから飛ぶことを望んでいると仮定します。彼らはJFKで接続する必要がありますので、LHR - JFK便を100便、その後JFK - MIA便300便に変更してください。直接接続がないよう

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

クエリは、nullを返します:私は、クエリを実行する場合

。 LHR - MIAが存在するがJFK経由での関係を見つけるために、どのようにデータベースに問い合わせることができますか?

+3

ここでは..... .....接続を待つだけで十分ではないので、追加情報が必要になります。 –

+2

あなたはバーニーですか? – GurV

+0

@JayBlanchard「接続フライト」のように? ;-) –

答えて

0

実際に動作させるには、たとえば、到着時間と出発時間などの詳細情報が必要です。

選択肢をワンストップ(最大2回)に制限すると、簡単なSQL参加がフライトを見つけることができます。

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

もちろん、このクエリを実行する前に直行便を確認してください。また、到着時間と出発時間に制約を設ける必要があります。実際のスケジューリングソフトウェアでは、1つのゲートから別のゲートに到達するまでに時間がかかるため、到着時間<出発時刻と同じくらい単純ではありません。

さらに多くのストップを考慮する必要がある場合は、この後に実行されるクエリのジョインをさらに追加します。

ノンストップと一度に1つの停止を探すクエリを記述することもできますが、パフォーマンスの理由から避けることができます。

+0

ありがとうございました。これを試してみましょう。まだ勉強してる。私は今データベースを簡略化し、一度これを得るともっと複雑なものを試します:)。 – user3410094

1

が問題のテーブルの上に登録しようあなたの現在のスキーマとあなたはLEFTを使用して情報を得ることができるあなたがコメントであなたの質問を明確にする方法を考える:this exampleに示すように

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

それが返されます。

dep arr flight 
LHR JFK 100 

another example with an additional flightを追加して、これがどのように基本レベルで動作するかを示しました。繰り返しますが、コメントの中で尋ねられた変数については、多くの説明がありませんが、もしあなたがすべてのことが3つの元の列で尋ねられたものであれば、これはあなたが行きたいと思う方法かもしれません。

+0

アドバイスをいただきありがとうございます。 – user3410094