[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Флажки и БД
Страницы: 1, 2
Анастасия333
Таблица с коэффициентами

CREATE TABLE `checkpoints` (
`keyCheckpoint` INT(11) NOT NULL AUTO_INCREMENT,
`fkJournal` INT(11) NOT NULL,
`nameCheckpoint` LONGTEXT NOT NULL,
`ratioCheckpoint` FLOAT NOT NULL,
`data` DATE NOT NULL,
PRIMARY KEY (`keyCheckpoint`)
)


Таблица с оценками студента:

CREATE TABLE `studentresults` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`keyStudent` INT(11) NOT NULL,
`fkTeacher` INT(11) NOT NULL,
`fkJournal` INT(11) NOT NULL,
`ratingStudentResult` INT(11) NOT NULL,
`fkCheckpoints` INT(11) NOT NULL,
PRIMARY KEY (`id`)
)
Анастасия333
Цитата (Valick @ 9.06.2014 - 23:50)
Цитата
Коффициенты у меня хранятся в базе,и оценки.только в разных таблицах

они и должны быть в разных таблицах
Цитата
как ячейка из "1 аттестации" поймет что именно то выбрано и что именно то нужно посчитать.

покажите дамп таблицы с оценками

Таблица с коэффициентами

CREATE TABLE `checkpoints` (
`keyCheckpoint` INT(11) NOT NULL AUTO_INCREMENT,
`fkJournal` INT(11) NOT NULL,
`nameCheckpoint` LONGTEXT NOT NULL,
`ratioCheckpoint` FLOAT NOT NULL,
`data` DATE NOT NULL,
PRIMARY KEY (`keyCheckpoint`)
)

Таблица с оценками студента:

CREATE TABLE `studentresults` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`keyStudent` INT(11) NOT NULL,
`fkTeacher` INT(11) NOT NULL,
`fkJournal` INT(11) NOT NULL,
`ratingStudentResult` INT(11) NOT NULL,
`fkCheckpoints` INT(11) NOT NULL,
PRIMARY KEY (`id`)
)
Valick
ну для начала вот поправил немного ваш запрос
$query = "SELECT (SUM(s.ratingStudentResult*c.ratioCheckpoint))/SUM(c.ratioCheckpoint) 
FROM studentresults s LEFT JOIN checkpoints c
ON s.fkCheckpoints=c.keyCheckpoint
WHERE s.keyStudent = "
.$row['keyStudents'];
$query = mysql_query($query);

но судя по запросу он у вас в цикле, а это крайне не хорошо, считать можно (и нужно сразу для всех нужных студентов)
покажите запрос из которого получаете $row['keyStudents']

_____________
Стимулятор ~yoomoney - 41001303250491
Анастасия333
////
Valick .

$queryNameStudents = "SELECT keyStudents, secontNameStudent, firstNameStudent, lastNameStudent
FROM
$tablest WHERE $tablest.fkGroup = ".$_POST['idJournal']."";

$secontNameStudent = mysql_query($queryNameStudents) or die(mysql_error());
Анастасия333
Valick
Кинь какую нить наводочку?как всё таки можно сделать?
Valick
Вот так можно получить таблицу одним запросом для всех студентов (хотя писать такие запросы без проверки тяжеловато, а вы упорно не хотите мне дать данные)
$query = "SELECT s.keyStudents,
s.secontNameStudent,
s.firstNameStudent,
s.lastNameStudent,
(SUM(r.ratingStudentResult*c.ratioCheckpoint))/SUM(c.ratioCheckpoint) rating
FROM student s
LEFT JOIN studentresults r ON r.keyStudent = s.keyStudents
LEFT JOIN checkpoints c ON r.fkCheckpoints=c.keyCheckpoint
GROUP BY r.keyStudent"
;
$query = mysql_query($query);


для того что бы так же одним запросом считать рейтинг по выборочным позициям разным для разных студентов их надо хранить в таблице, если по отдельному студенту или для всех студентов с одинаковыми выбранными контрольными точками, то можно "на лету" добавив условие WHERE keyCheckpoint IN(номера нужных контрольных точек через запятую)

_____________
Стимулятор ~yoomoney - 41001303250491
Анастасия333
Valick
Так я не могу пропписать в условиикакие контрольные точке.мне их надо на странице выбрать)или я не понимаю о чем вы)
Valick
Естественно их надо выбрать и передать в обработчик, и на основе выбранных точек сформирровать запрос к БД
например у вас $_POST['checkpoints'] который содержит массив array(1,2,4)
тогда условие сформировать можно так, массив POST сразу заполним для примера
и напишем таки функцию обработки элементов массива, а то с безопасностью у вас мягко говоря беда
function check($var){
return (int)$var;
}
$_POST['checkpoints'] = array(1,2,4);
$where = isset($_POST['checkpoints'])
?
'WHERE c.keyCheckpoint IN('.implode(',', array_filter($_POST['checkpoints'], "check")).')'
: false ;
$query = "SELECT s.keyStudents,
s.secontNameStudent,
s.firstNameStudent,
s.lastNameStudent,
(SUM(r.ratingStudentResult*c.ratioCheckpoint))/SUM(c.ratioCheckpoint) rating
FROM student s
LEFT JOIN studentresults r ON r.keyStudent = s.keyStudents
LEFT JOIN checkpoints c ON r.fkCheckpoints=c.keyCheckpoint
GROUP BY r.keyStudent"
;
$query = !empty($where)? $query.' '.$where : $query;
echo $query;

а теперь закоментируйте //$_POST['checkpoints'] = array(1,2,4); и посмотрите как изменится запрос
таким образом можно собирать достаточно сложные запросы, а не только условие WHERE

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.