Проблемы с обновлением базы данных PHP и MySQL - PullRequest
0 голосов
/ 14 января 2010

Я пытаюсь изменить свою систему рейтинга, которая раньше использовала только одну таблицу, но теперь я изменяю ее, чтобы использовать несколько таблиц, и я действительно не знаю, как обновить или вставить новый рейтинг в базу данных, и вам было интересно, как это сделать, используя структуру таблиц MySQL?

Также, как мне это сделать, адаптировав новый код к моему текущему PHP-коду, который я хочу изменить, и он указан ниже.

Сначала позвольте мне объяснить, в каких таблицах они хранят информацию, когда учащиеся оценивают своих учителей. Я перечислил, какие таблицы будут хранить в примеры ниже, чтобы дать вам лучшее понимание того, что я пытаюсь сделать. Студенты могут оценивать учителей только один раз.

Я предоставил две таблицы MySQL, которые должны быть обновлены, которые перечислены ниже.

Мои таблицы MySQL

CREATE TABLE teachers_grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
grade_id INT UNSIGNED NOT NULL,
teachers_id INT UNSIGNED NOT NULL,
student_id INT UNSIGNED NOT NULL,
date_created DATETIME NOT NULL,
PRIMARY KEY (id)
);


CREATE TABLE grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
letter_grade VARCHAR(2) NOT NULL,
grade_points FLOAT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);

Что будет хранить база данных.

teachers_grades

id  grade_id    teachers_id     student_id     date_created
1       3       2               32            2010-01-23 04:24:51
2       1       32              3              2010-01-23 12:13:58
3       2       32              103            2010-01-23 12:24:45

1020 * марка *

id  letter_grade    points
1           A+      10
2           D       3
3           B       5

Вот старый код PHP.

// function to insert rating
function rate(){
    $text = strip_tags($_GET['rating']);
    $update = "update vote set counter = counter + 1, value = value + ".$_GET['rating']."";

    $result = mysql_query($update); 
    if(mysql_affected_rows() == 0){
        $insert = "insert into vote (counter,value) values ('1','".$_GET['rating']."')";
        $result = mysql_query($insert); 
    }
}

Старый стол.

 CREATE TABLE vote (
 `counter` int(8) NOT NULL default '0',
 `value` int(8) NOT NULL default '0'
 );

Ответы [ 2 ]

0 голосов
/ 14 января 2010

Ваш старый стол был немного запутанным, так как кажется, что он оценивает только одного учителя или учителей в целом.

Теперь кажется, что ваш новый процесс проектирования требует от вас: - магазин рейтинга и средних учителей - отслеживать исторические рейтинги от студентов

таблица рейтинга должна выглядеть примерно так:

Таблица: рейтинг

rating_id student_id teacher_id grade_id date_created
 1         101         21         1      2010-01-23 04:24:51
 2         102         21         1      2010-01-23 04:26:51
 3         102         22         2      2010-01-23 04:28:51
 4         103         24         1      2010-01-23 04:44:51

Ваш код использования:

$rating_value = $_GET['rating']; // Remember to sanitize your inputs
$student_id = $_GET['student_id'];
$teacher_id = $_GET['teacher_id'];
rate_a_teacher($teacher_id, $student_id, $rating_value);

Ваш метод:

function rate_a_teacher($teacher_id, $student_id, $rating_value)
{
    // Find the corrosponding to specified rating value
    $grade_id = find_grade_id($rating_value); //TODO

    $sql = "
        INSERT INTO rating
            ('student_id', 'teacher_id', 'grade_id', 'date_created')
        VALUE 
            ($student_id, $teacher_id, $grade_id, NOW);
    ";

    mysql_query($sql); 
}

Я пропустил реализацию для find_grade_id(), чтобы вы заполнили ее сами.

Цель разделения ваших рассчитанных значений на отдельные записи состоит в том, чтобы вы могли начать делать интересные отчеты, как например:

Найти среднее значение рейтинга каждого учителя за последние 3 месяца:

SELECT teacher_id, (SUM(points)/COUNT(rating_id)) AS average_score
FROM rating
LEFT JOIN grades ON grades.id = rating.grade_id
WHERE date_created > SUBDATE(NOW(), INTERVAL 3 MONTH)
GROUP BY teacher_id
0 голосов
/ 14 января 2010

во-первых, сделайте mysql_escape_string для параметров при вставке как:

mysql_real_escape_string($_GET['rating']);

секунда

вам нужно получить все параметры (из GET или POST) и вставить его в БД, theacher_id ....

теперь я вижу только рейтинг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...