SQL предыдущий, следующий ряд

2 таблицы, одна с рейсами, одна с пунктом назначения.
Я хочу, чтобы все рейсы с вылетом и прилетом были в таблице 2 (у меня работают). Но я хочу, чтобы прибытие следовало за отъездом. См пример
Спасибо за все

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

С этим запросом у меня есть все рейсы, где вылет и прибытие находятся в обычной таблице. Хорошо! Но я так хочу только рейс, который прилет следует за вылетом.

Пример сегодня с этим:

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

Я имею :

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

Мне нужно :

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

Я думаю (но не работает):

$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

Решение

Другой способ сделать ваш запрос:

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

но это дает тот же результат.

Проблема в том, что в вашем примере на рейсе a320vvv есть строка пары вылета / прибытия EGKK LFPO на рейсах, а в таблице 2 у вас есть EGKK LFPO и LFPO EGKK. Так что запрос выполняется правильно.

Действительно, если вы сделаете SELECT *, вы увидите, что результат:

введите описание изображения здесь

если выбранный рейс является основным, с вылетом прибытия EGKK LFPO, а не грузовым, который имеет вылет прибытия LFPO EGKK.

С уважением

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]