简体   繁体   English

SQL 上一行、下一行

[英]SQL previous, next row

2 table, one with flights, one with destination. 2张桌子,一张有航班,一张有目的地。 I want all flights with departure and arrival who are in the table 2 (work for me).我想要表 2 中的所有出发和到达航班(为我工作)。 But i want so that arrival follow departure.但我想让到达跟随离开。 See example Thanks for all查看示例 谢谢大家

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')
    ;

With this request i have all flight where Departure et Arrival are in Regular table.有了这个请求,我所有的航班都在常规表中出发和到达。 Good!好的! But i want so only flight who arrival follow departure.但我只想要到达后出发的航班。

Exemple today with this :今天以这个为例:

 $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)

I want :我想要 :

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

I think to (but dont work) :我认为(但不工作):

$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)
";

A different way to make your query is:进行查询的另一种方法是:

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));

but it produces the same result.但它产生相同的结果。

The problem is that in your example the flight a320vvv has a Departure-Arrival couple string EGKK LFPO in flights and in Table2 you have both EGKK LFPO and LFPO EGKK.问题是,在您的示例中,航班 a320vvv 在航班中具有出发-到达配对字符串 EGKK LFPO,而在表 2 中,您同时拥有 EGKK LFPO 和 LFPO EGKK。 So the query is doing right.所以查询是正确的。

Indeed, if you make SELECT * you see that the result is:事实上,如果你做 SELECT * 你会看到结果是:

在此处输入图片说明

where the selected flight is the com one, with EGKK LFPO departure arrival, and not the cargo one, that has departure arrival LFPO EGKK.其中所选航班是 com 航班,具有 EGKK LFPO 出发到达,而不是具有出发到达 LFPO EGKK 的货运航班。

Regards问候

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM