Сложный запрос к БД с вычислением

Статус
В этой теме нельзя размещать новые ответы.

Sergo_Sev

Творец
Регистрация
14 Июн 2008
Сообщения
578
Реакции
193
Имеется:
Таблица со списком самолётов и числом мест в самолёте
Вторая таблица со списком заказов и с числом заказанных мест на конкретном самолёте, каждым пользователем

Реально ли через запрос к MySQL получить число свободных мест в каждом самолёте?

Сумму по занятым местам в конкретном самолёте считаю так
SELECT SUM(`count_people`) as sum FROM `zakazi` WHERE plane_id = (тут указываю нужный мне ID)

База данных
PHP:
CREATE TABLE IF NOT EXISTS `planes` (
  `id` smallint(5) NOT NULL AUTO_INCREMENT,
  `plane_name` varchar(20) NOT NULL DEFAULT '',
  `mesta` varchar(20) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=13 ;


INSERT INTO `planes` (`id`, `plane_name`, `mesta`) VALUES
(1, 'Citation Mustang', '14'),
(2, 'Citation X', '9'),
(3, 'Citation Sovereign', '10'),
(4, 'ACJ 319', '19');

-- --------------------------------------------------------

CREATE TABLE IF NOT EXISTS `zakazi` (
  `id` mediumint(8) NOT NULL AUTO_INCREMENT,
  `plane_id` smallint(5) NOT NULL,
  `count_people` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ;


INSERT INTO `zakazi` (`id`, `plane_id`, `count_people`) VALUES
(1, 1, '1'),
(2, 2, '3'),
(3, 3, '1'),
(4, 4, '2'),
(5, 1, '4'),
(6, 2, '2'),
(7, 3, '1'),
(8, 4, '3');
 
Через join, рекомендую, ибо прописав p.* сможешь одним запросом и по самолёту инфу выдернуть:
PHP:
SELECT SUM(z.`count_people`) as buy_sum, (p.mesta - SUM(z.`count_people`)) as free_sum FROM `zakazi` z
JOIN planes p ON p.id = z.plane_id
WHERE z.plane_id = 4

Через подзапрос, id надо в двух местах прописывать. Не рекомендую так делать, больше академического интереса ради:
PHP:
SELECT SUM(`count_people`) as buy_sum, (SELECT mesta FROM planes WHERE id = 1) - SUM(`count_people`) as free_sum FROM `zakazi`
WHERE plane_id = 1
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху