Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь в составлении запроса 
:(
    Опции темы
spleaner
Дата 30.6.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 26.2.2007

Репутация: нет
Всего: 3



Имеется система из 6 таблиц..
здесь их структура и тестовые данные:
Код

-- 
-- Структура таблицы `ABITURA`
-- 

CREATE TABLE `ABITURA` (
  `ID` int(11) NOT NULL default '0',
  `FIO` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- 
-- Дамп данных таблицы `ABITURA`
-- 

INSERT INTO `ABITURA` VALUES (70, 'Ваня');
INSERT INTO `ABITURA` VALUES (64, 'Саша');
INSERT INTO `ABITURA` VALUES (65, 'Петя');

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

-- 
-- Структура таблицы `EKZ`
-- 

CREATE TABLE `EKZ` (
  `ID` int(11) NOT NULL default '0',
  `NAME` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- 
-- Дамп данных таблицы `EKZ`
-- 

INSERT INTO `EKZ` VALUES (68, 'Русский (зачет)');
INSERT INTO `EKZ` VALUES (69, 'Обществознание');
INSERT INTO `EKZ` VALUES (67, 'Математика');

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

-- 
-- Структура таблицы `FACS`
-- 

CREATE TABLE `FACS` (
  `ID` int(11) NOT NULL default '0',
  `NAME` varchar(255) NOT NULL default '',
  `MEST` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- 
-- Дамп данных таблицы `FACS`
-- 

INSERT INTO `FACS` VALUES (61, 'ИВТ', 100);
INSERT INTO `FACS` VALUES (63, 'Экономика', 80);
INSERT INTO `FACS` VALUES (62, 'Математика', 100);

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

-- 
-- Структура таблицы `F_E`
-- 

CREATE TABLE `F_E` (
  `FAC_ID` int(11) NOT NULL default '0',
  `EKZ_ID` int(11) NOT NULL default '0',
  PRIMARY KEY  (`FAC_ID`,`EKZ_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- 
-- Дамп данных таблицы `F_E`
-- 

INSERT INTO `F_E` VALUES (61, 66);
INSERT INTO `F_E` VALUES (61, 67);
INSERT INTO `F_E` VALUES (61, 68);
INSERT INTO `F_E` VALUES (62, 66);
INSERT INTO `F_E` VALUES (62, 67);
INSERT INTO `F_E` VALUES (62, 68);
INSERT INTO `F_E` VALUES (63, 68);
INSERT INTO `F_E` VALUES (63, 69);

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

-- 
-- Структура таблицы `SD_EKZ`
-- 

CREATE TABLE `SD_EKZ` (
  `ABIT_ID` int(11) NOT NULL default '0',
  `EKZ_ID` int(11) NOT NULL default '0',
  `MARK` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ABIT_ID`,`EKZ_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- 
-- Дамп данных таблицы `SD_EKZ`
-- 

INSERT INTO `SD_EKZ` VALUES (70, 67, 2);
INSERT INTO `SD_EKZ` VALUES (70, 68, 2);
INSERT INTO `SD_EKZ` VALUES (70, 69, 2);
INSERT INTO `SD_EKZ` VALUES (65, 69, 5);
INSERT INTO `SD_EKZ` VALUES (64, 67, 3);
INSERT INTO `SD_EKZ` VALUES (65, 67, 5);
INSERT INTO `SD_EKZ` VALUES (64, 68, 4);
INSERT INTO `SD_EKZ` VALUES (65, 68, 2);

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

-- 
-- Структура таблицы `SP_Z_F`
-- 

CREATE TABLE `SP_Z_F` (
  `FAC_ID` int(11) NOT NULL default '0',
  `ABIT_ID` int(11) NOT NULL default '0',
  PRIMARY KEY  (`FAC_ID`,`ABIT_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- 
-- Дамп данных таблицы `SP_Z_F`
-- 

INSERT INTO `SP_Z_F` VALUES (41, 42);
INSERT INTO `SP_Z_F` VALUES (44, 42);
INSERT INTO `SP_Z_F` VALUES (46, 1);
INSERT INTO `SP_Z_F` VALUES (46, 42);
INSERT INTO `SP_Z_F` VALUES (61, 64);
INSERT INTO `SP_Z_F` VALUES (61, 65);
INSERT INTO `SP_Z_F` VALUES (61, 70);
INSERT INTO `SP_Z_F` VALUES (62, 70);
INSERT INTO `SP_Z_F` VALUES (63, 65);
INSERT INTO `SP_Z_F` VALUES (63, 70);


таблицы:
ABITURA - это ИД и ФИО абитуриента
FACS  - ID и ИМЯ факультета и кол-во мест
EKZ  - ID и НАЗВАНИЕ экзамена
F_E  - таблица , в которой хранятся записи типа Факультет-Экзамен.. т.е. все экзамены для каждого факультета
SP_Z_F - список заявленных факультетов.. там ИД абитурианта и ИД фака на который он подал заявку (один абитур. может подать на несколько факов)
SD_EKZ - ИД_абитуры, ИД_экзамена и оценка за него (от 2 до 5)

нужно 1 запросом (можно сколько угодно вложенных) вывести тех абитуриентов, которые завалили хотябы 1 экзамен (написали на 2) на кадый заявленный факультет


тут надо уточнить: если например на факультет Информатики и Математики надо сдавать "математику", то абитуриаент пишет этот экз 1 раз и результат сразу на все факи, на которые он подал заявку..
Вот такая вот задача  smile 
PM   Вверх
sTa1kEr
Дата 1.7.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Вроде, достатчно простой запрос.
Код

SELECT DISTINCT a.FIO, f.NAME FROM abitura a
INNER JOIN sp_z_f sp ON sp.ABIT_ID = a.ID
INNER JOIN facs f ON f.ID = sp.FAC_ID
INNER JOIN f_e fe ON fe.FAC_ID = sp.FAC_ID
INNER JOIN ekz e ON e.ID = fe.EKZ_ID
INNER JOIN sd_ekz sd ON sd.ABIT_ID = a.ID AND sd.EKZ_ID = e.ID
WHERE sd.MARK = 2

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.