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

Тема в разделе "Базы данных", создана пользователем Sergo_Sev, 8 июн 2014.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Sergo_Sev

    Sergo_Sev Творец

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

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

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

    База данных
    PHP:
    CREATE TABLE IF NOT EXISTS `planes` (
      `
    idsmallint(5NOT NULL AUTO_INCREMENT,
      `
    plane_namevarchar(20NOT NULL DEFAULT '',
      `
    mestavarchar(20NOT 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` (
      `
    idmediumint(8NOT NULL AUTO_INCREMENT,
      `
    plane_idsmallint(5NOT NULL,
      `
    count_peopletext NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=;


    INSERT INTO `zakazi` (`id`, `plane_id`, `count_people`) VALUES
    (11'1'),
    (
    22'3'),
    (
    33'1'),
    (
    44'2'),
    (
    51'4'),
    (
    62'2'),
    (
    73'1'),
    (
    84'3');
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    Через join, рекомендую, ибо прописав p.* сможешь одним запросом и по самолёту инфу выдернуть:
    PHP:
    SELECT SUM(z.`count_people`) as buy_sum, (p.mesta SUM(z.`count_people`)) as free_sum FROM `zakaziz
    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
     
Статус темы:
Закрыта.