2016-03-14 1 views
-1

2 table, une avec des vols, une avec destination. Je veux tous les vols avec départ et arrivée qui sont dans le tableau 2 (travail pour moi). Mais je veux que l'arrivée suive le départ. Voir par exemple Merci pour tousSQL précédent, rangée suivante

CREATE TABLE flights 
     (`Name` varchar(10), `Departure` varchar(50), `Arrival` varchar(10), `Pass` int, `Cargo` int, `Dist` int) 
    ; 

    INSERT INTO flights 
     (`Name`, `Departure`, `Arrival`, `Pass`, `Cargo`, `Dist`) 
    VALUES 
     ('444 737vvv', 'LFLL gee', 'LPMAdsf', 200, 2000, 12), 
     ('gg737vvv', 'LPMA-egege', 'LFLLdsf', 3000, 0, 13), 
     ('747vvv', 'LFLLèèegege', 'LPMAdsf', 0, 5000, 15), 
     ('747vvv', 'OTHHèèegege', 'LPMAdsf', 0, 5000, 15), 
     ('747vvv', 'OMDBèèegege', 'LPMAdsf', 0, 5000, 15), 
     ('a320vvv', 'EGKK-egege', 'LFPOdd', 0, 6000, 14) 
    ; 



    CREATE TABLE Regular 
     (`Dep` varchar(21), `Arri` varchar(21),`Type` varchar(21)) 
    ; 

    INSERT INTO Regular 
     (`Dep`, `Arri`, `type`) 
    VALUES 
     ('LFLL', 'LFPG', 'cargo'), 
     ('LFPG', 'LFLL', 'cargo'), 
     ('LFLL', 'LPMA', 'com'), 
     ('LPMA', 'LFLL', 'cargo'), 
     ('LFPO', 'EGKK', 'cargo'), 
     ('EGKK', 'LFPO', 'com') 
    ; 

Avec cette demande, j'ai tous les vols où Départ et arrivée sont dans le tableau régulier. Bien! Mais je veux donc seulement le vol qui arrive après le départ.

Exemple aujourd'hui avec ceci:

$query = "Select 
    flights.UserName, 
    flights.FlightDate, 
    flights.FlightResult, 
    flights.AircraftName, 
    flights.DepartureIcaoName, 
    flights.ArrivalIcaoName 
    from 
    flights 
    inner join regular 
    on regular.Departure = SUBSTRING(flights.DepartureIcaoName,1,4) and regular.Arrival = SUBSTRING(flights.ArrivalIcaoName,1,4);"; 

I Have:

('444 737vvv', 'LFLL gee', 'LPMAdsf', 200, 2000, 12), 
    ('gg737vvv', 'LPMA-egege', 'LFLLdsf', 3000, 0, 13), 
    ('747vvv', 'LFLLèèegege', 'LPMAdsf', 0, 5000, 15), 
    ('a320vvv', 'EGKK-egege', 'LFPOdd', 0, 6000, 14) 

Je veux:

('444 737vvv', 'LFLL gee', 'LPMAdsf', 200, 2000, 12), 
    ('gg737vvv', 'LPMA-egege', 'LFLLdsf', 3000, 0, 13), 
    ('747vvv', 'LFLLèèegege', 'LPMAdsf', 0, 5000, 15), 

Je pense (mais ne fonctionnent pas):

$query = "Select 
flights.*, regular.* 
from flights, regular 
where regular.Departure = SUBSTRING(flights.DepartureIcaoName,1,4) 
and regular.Arrival = SUBSTRING(flights.ArrivalIcaoName,1,4) 
and SUBSTRING(flights.DepartureIcaoName,1,4) = (SUBSTRING(flights.ArrivalIcaoName,1,4) - 1) 
"; 
+1

Une logique derrière ces résultats serait bien. – sagi

+0

À quoi sert la table 'regular'? – mikeyq6

+0

https://stackoverflow.com/questions/35997714/mysql-order-row-on-previous-column-value-compare-order-by-date – user3189715

Répondre

1

Une autre façon de faire de votre requête est:

SELECT 
    flights.name, 
    flights.Departure 
FROM 
    flights 
    INNER JOIN Table2 
     ON CONCAT(Table2.Dep,Table2.Arri) = CONCAT(SUBSTRING(flights.Departure,1,4),SUBSTRING(flights.Arrival,1,4)); 

mais elle produit le même résultat. Le problème est que dans votre exemple le vol a320vvv a un couple départ-arrivée EGKK LFPO en vol et dans le tableau 2 vous avez EGKK LFPO et LFPO EGKK. Donc, la requête va bien.

En effet, si vous faites SELECT * vous voyez que le résultat est:

enter image description here

où le vol sélectionné est le com un, avec l'arrivée de départ EGKK LFPO, et non pas celui de la cargaison, qui a départ arrivée LFPO EGKK.

Observe

+0

https://stackoverflow.com/questions/35997714/mysql-order -row-on-previous-column-value-compare-order-by-date – user3189715