2010-01-14 3 views
0

J'essaie de changer mon système de notation qui n'utilisait qu'une seule table auparavant mais maintenant je la change pour utiliser plusieurs tables et je ne sais vraiment pas comment mettre à jour ou insérer une nouvelle note dans la base de données et se demandait comment le faire en utilisant ma structure de tables MySQL?PHP et MySQL Mise à jour des problèmes de base de données

Aussi comment je fais cela en adaptant le nouveau code à mon code PHP actuel que je veux changer qui est listé ci-dessous. Tout d'abord, laissez-moi vous expliquer ce que mes tables tiennent l'information quand les élèves évaluent leurs propres enseignants. J'ai énuméré ce que les tables vont contenir dans les exemples ci-dessous pour vous donner une meilleure compréhension de ce que j'essaie de faire. Les étudiants ne sont autorisés à évaluer les enseignants une fois.

J'ai fourni les deux tables MySQL qui devraient être mises à jour et listées ci-dessous.

Mes tables 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) 
); 

Qu'est-ce que la base de données. Maintenir

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 

grades

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

Voici l'ancien code 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); 
    } 
} 

Ancienne table.

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

Pouvez-vous montrer la structure de table précédente. A partir de votre description, elle affiche uniquement Compteur et Valeur dans le tableau des voix. –

+0

c'est tout ce qu'il y avait. – iNeEdHeLp

+0

Dans votre ancien code PHP, quel est le point de '$ text = strip_tags ($ _ GET ['rating']);' quand vous ne l'utilisez pas? : o –

Répondre

0

premier, ne mysql_escape_string aux parametrs lors de l'insertion comme:

mysql_real_escape_string($_GET['rating']); 

seconde

vous devez obtenir tous les paramètres (de GET ou POST) et insérez-le à la DB, le teacher_id ....

maintenant je ne vois que la note.

+0

qui était mon ancienne structure pour mon ancienne base de données Je veux savoir comment le faire avec la nouvelle base de données. – iNeEdHeLp

0

Votre ancienne table était un peu déroutante car il semble qu'elle n'évalue qu'un enseignant ou un enseignant dans son ensemble.

Maintenant, il semble que votre nouveau processus de conception vous oblige à: - Note du magasin et moyennes des enseignants - suivre évaluations historiques des étudiants

table de notation devrait ressembler à quelque chose comme

Tableau: Note

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 

Votre utilisation du code:

$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); 

Votre méthode:

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); 
} 

Je sautais pour la mise en œuvre find_grade_id() pour vous de le remplir en vous-même.

afin de partager vos valeurs calcualted aux enregistrements individuels est que vous pouvez commencer à faire des rapports intéressants, comme tels:

trouver la valeur de note moyenne de chaque enseignant pour les 3 derniers mois:

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 
Questions connexes