我正在尝试更改我的评级系统,之前只使用过一个表,但现在我正在更改它以使用多个表格而且我真的不知道如何 更新或插入新的评级到数据库,并想知道如何使用我的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
级别
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'
);
答案 0 :(得分:0)
首先,在插入时执行mysql_escape_string到参数:
mysql_real_escape_string($_GET['rating']);
第二
你需要获取所有参数(来自GET或POST)并将其插入数据库, teacher_id ....
现在我只看到评级。
答案 1 :(得分:0)
你的旧桌子有点令人困惑,因为它似乎只评价了一位教师或整个教师。
现在看来您的新设计流程需要您: - 商店评级和教师平均值 - 跟踪学生的历史评分
评级表应该看起来像
表:评级
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