Два запроса в один из одной таблицы

Pustota

Новичок
Два запроса в один из одной таблицы

Народ, помогите запрос составить. Нужно данные из таблицы выбрать два раза. Это таблица по времени вылета самолетов из аэропортов.
Можно ли сделать так, чтобы за один запрос выбирался рейс и туда и обратно, если известно из какого в какой аэропорт и во сколько самолёт летит?
Таблица:
Код:
+---------+---------+------------------+----------------+---------------------+
| id      | flight  | departureairport | arrivalairport | departuredatetime   |
+---------+---------+------------------+----------------+---------------------+
| 3118276 | 3002933 |              136 |          40216 | 2006-11-10 01:50:00 |
| 3115505 | 3002397 |              137 |            560 | 2006-11-10 07:05:00 |
| 3117045 |   37262 |              137 |            359 | 2006-11-10 07:10:00 |
| 3090994 |   37365 |                2 |            560 | 2006-11-10 10:10:00 |
| 3090738 | 3002937 |            40216 |            136 | 2006-11-10 10:45:00 |
| 3113811 | 3004490 |                2 |            560 | 2006-11-10 10:50:00 |
| 3117165 |   37265 |              359 |            137 | 2006-11-10 12:00:00 |
| 3115593 | 3002400 |              560 |            137 | 2006-11-10 12:05:00 |
| 3111972 | 3003908 |                2 |          25430 | 2006-11-10 13:45:00 |
| 3110875 | 3003078 |                2 |          25430 | 2006-11-10 14:20:00 |
| 3092666 | 3004521 |                2 |            359 | 2006-11-10 14:30:00 |
| 3091098 |   37369 |              560 |              2 | 2006-11-10 14:45:00 |
| 3113819 | 3004495 |              560 |              2 | 2006-11-10 15:30:00 |
| 3111988 | 3003911 |            25430 |              2 | 2006-11-10 19:20:00 |
| 3092898 | 3004525 |              359 |              2 | 2006-11-10 19:30:00 |
| 3110908 | 3003081 |            25430 |              2 | 2006-11-10 20:20:00 |
| 3119743 |   15636 |              136 |            664 | 2006-11-10 20:50:00 |
| 3118763 | 3006031 |              136 |            842 | 2006-11-10 21:20:00 |
| 3119890 |   15630 |              136 |            664 | 2006-11-10 23:35:00 |
| 3118970 | 3006032 |              842 |            136 | 2006-11-11 01:45:00 |
| 3121185 | 3006121 |                2 |              3 | 2006-11-11 06:45:00 |
| 3115752 | 3003314 |              137 |            560 | 2006-11-11 07:05:00 |
| 3116488 |   39078 |              137 |            359 | 2006-11-11 07:15:00 |
| 3114505 | 3004521 |                2 |            359 | 2006-11-11 07:55:00 |
| 3114033 | 3004490 |                2 |            560 | 2006-11-11 08:30:00 |
| 3121333 | 3006125 |                3 |              2 | 2006-11-11 09:45:00 |
| 3116624 |   39081 |              359 |            137 | 2006-11-11 12:00:00 |
| 3115864 | 3003317 |              560 |            137 | 2006-11-11 12:05:00 |
| 3114665 | 3004525 |              359 |              2 | 2006-11-11 12:45:00 |
| 3114121 | 3004495 |              560 |              2 | 2006-11-11 13:15:00 |
| 3093796 |   15633 |              664 |            136 | 2006-11-11 14:20:00 |
| 3110071 | 3005492 |              137 |            359 | 2006-11-11 17:30:00 |
| 3110135 | 3004833 |              359 |            137 | 2006-11-11 22:30:00 |
| 3112062 | 3003880 |                2 |            664 | 2006-11-11 22:40:00 |
| 3119953 |   15630 |              136 |            664 | 2006-11-11 23:35:00 |
| 3111102 | 3005669 |              137 |            560 | 2006-11-12 00:00:00 |
| 3111141 | 3005671 |              560 |            137 | 2006-11-12 00:00:00 |
| 3112260 | 3003852 |              137 |            560 | 2006-11-12 07:05:00 |
| 3117401 |   37268 |              137 |            359 | 2006-11-12 07:05:00 |
| 3113179 | 3005800 |              137 |            560 | 2006-11-12 08:00:00 |
| 3117485 |   37271 |              359 |            137 | 2006-11-12 12:00:00 |
| 3112329 | 3003855 |              560 |            137 | 2006-11-12 12:05:00 |
| 3112313 | 3003884 |              664 |              2 | 2006-11-12 13:00:00 |
| 3093889 |   15633 |              664 |            136 | 2006-11-12 14:20:00 |
| 3110199 | 3003686 |              137 |            560 | 2006-11-12 17:35:00 |
| 3119572 |   15636 |              136 |            664 | 2006-11-12 18:25:00 |
| 3118835 | 3006031 |              136 |            842 | 2006-11-12 21:20:00 |
| 3111264 | 3002176 |                2 |            585 | 2006-11-12 21:20:00 |
| 3110263 | 3003689 |              560 |            137 | 2006-11-12 22:25:00 |
+---------+---------+------------------+----------------+---------------------+
То есть, сейчас я делаю два запроса. Один туда, другой обратно.
PHP:
SELECT * from flights where DATE_FORMAT(departuredatetime, ‘%d.%m.%Y’)=’10.11.2006’ and departureairport in (2,136,137);
SELECT * from flights where DATE_FORMAT(departuredatetime, ‘%d.%m.%Y’)=’12.11.2006’ and arrivalairport in (2,136,137);
Занимает много времени два запроса. Хочется объединить в один. Можно ли так сделать чтобы выводились данные одним запросом в таком порядке:
Код:
+----+--------+-----------------------+---------------------+-------------------------+-----------------------+-----------+--------------+
| id | flight | departureairport туда | arrivalairport туда | departureairport оттуда | arrivalairport оттуда | дата туда | дата обратно |
+----+--------+-----------------------+---------------------+-------------------------+-----------------------+-----------+--------------+
Или в MySQL такое в принципе невозможно?
 

Андрейка

Senior pomidor developer
к сожалению невозможно :( начиная с mysql4 убрали оператор OR, оставили тока AND.. и тот - чиста паглумицца
 

Pustota

Новичок
а если серьёзно? Простым OR выведет рейсы туда или обратно. А мне надо объединить результат в одну строку. Чтобы в одной строке показывалось и туда и обратно.
 

partizan

Новичок
Чтоб одной строкой - надо джоинить таблицу саму с собой, быстрее от этого запрос врядли станет работать
 

chira

Новичок
Pustota
индекс есть на поле departuredatetime? запрос нужно переписать так, что бы использовался индекс
Код:
SELECT * from flights where departuredatetime BETWEEN '2006-11-10 00:00:00' AND '2006-11-10 23:59:59'
  and departureairport in (2,136,137);

SELECT * from flights where departuredatetime BETWEEN '2006-11-12 00:00:00' AND '2006-11-12 23:59:59'
  and arrivalairport in (2,136,137);
возможно лучшие результаты можно получить если создать составной индекс (departuredatetime,departureairport)
 
Сверху