2017-01-04 6 views
1

電車の時刻表のための簡単なデータベースを作成する必要があります。列車の時刻表データベースを相互参照する

私は列車のすべてのルートを持つルートテーブルを持っています。ルートは

id | departure_station | arrival_station | time 

ようになります。しかしdeparture_stationがBあると到着駅がGある場合、私は時間をまとめるかはおろか、ユーザーとを提供するために、Cからそれらと決して間でFへのすべてのステーションを持っています全体のルート。

私の考えはIDによってそれらを注文し、すべての駅に一意のIDを与え、その後のid>Bとid < Gを持っているすべてのdeparture_station結果を取得するので、結果は-C-D-E-F-だろうが、それはこれではないようですそれを行う最も簡単な方法です。

EそれまではFに私はGに達し、その後、DEに、私はBDにrefferenceできるか、SQLデータベースが順に結果を持っていないということなので?

EDIT:クライアントがLetcaniから出発し、Motcaに到達したい

サンプル

traind_id | departs | arrives | route_id 
    1337  Iasi  Pascani  56 


route_id | dep_station | arr_station | time 
    56  Val. Lupului  Letcani  00:05 
    56  Letcani   Tg. Frumos 00:10 
    56  Tg. Frumos  Podu Iloaiei 00:20 
    56  Podu Iloaiei  Motca   00:10 
    56  Motca   Pascani  00:30 

。そのために、私は彼が路線Iasi-Pascaniで列車1337に乗ることができ、彼の駅は合計route time = 00:10 + 00:20 + 00:10 = 00:40 minutesLetcani-Tg. Frumos-Podu Iloaiei-Motcaになることを彼に示したいと思います。

しかし、どのステーションを順番に選択すればよいのですか。そして、2つのステーションが中間ステーション以外の方法で接続されていない場合は、MotcaからLetcaniまで届くことがわかります。

+1

あなたは、テーブルと期待された結果から、いくつかのサンプルデータを表示することができますか? –

+0

@vkp私は自分の質問を編集しました。 –

+0

出発駅と到着駅は常に同じルートにありますか? –

答えて

0

まず、任意のマッチングルートがある場合逸脱と到着駅の両方を有する任意の経路、すなわち、見つける:

SELECT route_id 
FROM RouteStations AS R1 
JOIN RouteStations AS R2 USING (route_id) 
WHERE R1.dep_station = 'Letcani' 
    AND R2.arr_station = 'Motca'; 

その後は、このような各経路のため、ステーションを取得するために再帰common table expressionを使用します:

WITH RECURSIVE steps(nr, dep, arr, time) AS (
    SELECT 1, 
     dep_station, 
     arr_station, 
     time 
    FROM RouteStations 
    WHERE route_id = 56 
    AND dep_station = 'Letcani' 

    UNION ALL 

    -- fetch the step that departs from the previous arrival station 
    SELECT steps.nr + 1, 
     RouteStations.dep_station, 
     RouteStations.arr_station, 
     RouteStations.time 
    FROM RouteStations 
    JOIN steps ON steps.arr_station = RouteStations.dep_station 
    WHERE route_id = 56 
    AND RouteStations.dep_station <> 'Motca' 
) 
SELECT * 
FROM steps 
ORDER BY nr; 
関連する問題