Probleme de jointure avc insert into

Fermé
abla90 Messages postés 5 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 18 juin 2010 - 10 juin 2010 à 01:24
 fiu - 10 juin 2010 à 19:39
Bonsoir,
j'ai un petit problem!!
je travaille sur une application de pédagogie;je veux calculer la moyenne et la stocké dans le champ moyenne
j'ai 3 table
etudiant(id_etud,nom,.............)

module(code_mod,intitul_mod,......)

avoir_note(id_etud,code_mod,note td,note ex,moyenne)

j'ai calculer la moyenne et et je veux l'inserer dans le champ moyenne

INSERT INTO avoir_note(moyenne) VALUES($moy) WHERE
etudiant.id_etud=avoir_note.id_etud
AND module.code_mod=avoir_note.code_mod

la moyenne se calcule mais il l'insert pas dans la table!
veuilllez m'aiderrrrrrrr svvvvvvpp

merçi







4 réponses

XatOr Messages postés 742 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 5 décembre 2010 34
10 juin 2010 à 01:38
Il te manque l'id_etude et le cod_mod qui est obligatoire pour insérer une moyenne dans ta table avoir_note.
0
Salut,

l'instruction INSERT crée une ligne complète dans la table et charge les colonnes listées (sinon toutes) avec les valeurs données
1. soit par VALUES() énumérant une liste de constantes
2. soit par un SELECT qui va "ramener" les valeurs que tu veux insérer

Dans ton cas, il semble que les lignes de données soient déjà créées !
ce que tu cherches en fait est de mettre une valeur calculée extérieurement dans la colonne moyenne
... et cette mise à jour ne peut se faire qu'avec UPDATE

par exemple:
UPDATE avoir_note
SET moyenne = $moyenne
WHERE id_etud = $etudiant
AND code_mod = $module
0
abla90 Messages postés 5 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 18 juin 2010
10 juin 2010 à 12:47
bonjours;
mon problem n'est pas encore résolu ,il me calcule et il insert dans la base mais seulemen dans le premier enregistremen,donc il il rempli que le premier enregistremen voila mon code;

<?php
include'connexion.php';


$sql = "SELECT 'mat_etud' FROM 'etudiant'";
$sql1= "SELECT 'code_mod', 'coef_rat','coef_ex','coef_mod' FROM 'module'";
$sql2="SELECT 'mat_etud', 'note_cc' , 'note_exam' ,'note_rat' ,'moy_mod' FROM 'avoir_note' WHERE avoir_note.'ind_aquis'='0'";


$res = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
$res1 = mysql_query($sql1) or die('Erreur SQL : <br />'.$sql1);
$res2 = mysql_query($sql2) or die('Erreur SQL : <br />'.$sql2);
$nbr=mysql_fetch_array($res2);


$i=0;
while ($i < $nbr[0]) {

$cc=mysql_result($res2,$i,"note_cc");

$rat=mysql_result($res2,$i,"note_rat");

$exam=mysql_result($res2,$i,"note_exam");

$id_etud=mysql_result($res,$i,"mat_etud");

$code_m=mysql_result($res1,$i,"code_mod");


$test=$rat+$exam;
echo $test.'<br/>';

$req="UPDATE avoir_note SET moy_mod='$test'
WHERE mat_etud='$id_etud' AND code_mod='$code_m';";



$qr=mysql_query($req,$connection);



if(!$qr)
die("erreur requette:".$req." error:".mysql_error());
$i++;
}
?>
0
Salut,

Je suis une bille en php, je n'irais donc pas corriger ton php (d'ailleurs nous sommes en Bases de données et non programmation n'est-ce pas).

Ce que tu cherches à faire au final est
UPDATE avoir_note
SET moy_mod = <ton calcul>
WHERE mat_etud = <étudiant>
AND code_mod = <module>
nb: tu encadres $test par des apostrophes alors que ce doit être une colonne numérique dans ta base :-(

<ton calcul> ::= $rat + $exam, à savoir not_ram & not_exam provenant de avoir_note
<étudiant> ::= $id_etud soit le 1er mat_etud provenant de etudiant (comme tu t'occupes que de la 1ère ligne de etudiant, les autres étudiants auront une moyenne à 0)
<module> ::= $code_m soit code_mod provenant de module (là encore, on ne s'occupera que du premier module !)

On va rapidement passer sur le fait que les structures des tables utilisées depuis ton php ne correspond pas avec les structures annoncées dans ton post initial pour s'attacher aux faits que
1. toutes les données que tu manipules sont censées être dans avoir_note,
2. SQL sait faire des calculs
3. SQL est prévu pour manipuler des ensembles de données (il itère automatiquement en quelque sorte).
Donc, on devrait pouvoir réduire tout ton programme à

<?php
include'connexion.php';
$req="
UPDATE avoir_note
SET moy_mod = not_ram + not_exam
WHERE ind_acquis = 0
"; // ou ind_acquis = '0' je te laisse vérifier
$res=mysql_query($req,$connection);
if(!$res) die("erreur requete:".$req." error:".mysql_error());
?>

nb: comme je pige pas grand chose au php, ce qui est dessus est, à quelques détails près, du copier/coller de ce que tu as écrit
0