Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сложный запрос
 
 автор: Брянский   (04.12.2009 в 15:02)   письмо автору
 
 

ЗДРАВСТВУЙТЕ.
Имется таблицы:

CREATE TABLE `balls` (
  `ball_id` int(10) unsigned NOT NULL auto_increment,
  `ball_lesson_id` int(11) NOT NULL default '0',
  `ball_student_id` int(11) NOT NULL default '0',
  `ball_date` date default NULL,
  `ball` char(3) NOT NULL default '',
  `type` int(3) NOT NULL,
  PRIMARY KEY  (`ball_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

CREATE TABLE `lesson` (
  `lesson_id` int(10) unsigned NOT NULL auto_increment,
  `lesson_subject_journal_id` int(11) NOT NULL default '0',
  `lesson_date` date default NULL,
  `topic` text,
  `task` text,
  PRIMARY KEY  (`lesson_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

CREATE TABLE `subject_journal` (
  `subject_journal_id` int(10) unsigned NOT NULL auto_increment,
  `quater_id` int(11) NOT NULL default '0',
  `subject_journal_class_id` int(11) NOT NULL default '0',
  `subject_journal_subject_id` int(11) default NULL,
  `subject_journal_teacher_id` int(11) NOT NULL default '0',
  `hours` int(11) default NULL,
  PRIMARY KEY  (`subject_journal_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

CREATE TABLE `subject` (
  `subject_id` int(10) unsigned NOT NULL auto_increment,
  `subject_name` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`subject_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=13 ;


Вот мой запрос, который выводит оценки по всем предметам:

SELECT * FROM balls WHERE ball_student_id=$student_id AND ball != '' AND type='8' AND ball_date BETWEEN '$odate' AND '$ndate'


Мне нужно выводить оценки по определенным предметам.
Подскажите как это сделать?

P.S. Заранее большое спасибо!

  Ответить  
 
 автор: Fractured#   (04.12.2009 в 18:05)   письмо автору
 
   для: Брянский   (04.12.2009 в 15:02)
 

Это учебная задача? Лучше было бы в таблицу balls добавить subject_id, думаю. Но для учебной денормализация может быть запрещена.

  Ответить  
 
 автор: Брянский   (04.12.2009 в 19:04)   письмо автору
 
   для: Fractured#   (04.12.2009 в 18:05)
 

Да, это учебная задача, поэтому так не пройдет...

  Ответить  
 
 автор: Fractured#   (04.12.2009 в 19:15)   письмо автору
 
   для: Брянский   (04.12.2009 в 19:04)
 

Тогда как-то так:

SELECT b.* FROM balls b
JOIN lesson l ON b.ball_lesson_id = l.lesson_id
JOIN subject_journal j ON l.lesson_subject_journal_id = j.subject_journal_id
WHERE b.ball_student_id= $student_id AND b.ball != '' AND b.type='8' AND b.ball_date BETWEEN '$odate' AND '$ndate'
AND j.subject_journal_subject_id = $subject_id;

  Ответить  
 
 автор: Trianon   (04.12.2009 в 18:26)   письмо автору
 
   для: Брянский   (04.12.2009 в 15:02)
 

а что это за страшная таблица subject_journal ?
Какую сущность она описывает?

  Ответить  
 
 автор: Брянский   (04.12.2009 в 19:07)   письмо автору
52.2 Кб
 
   для: Trianon   (04.12.2009 в 18:26)
 

Вот прикрепил наглядную структуру базы данных, думаю там будет все понятно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования