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
fiu - 10 juin 2010 à 19:39
A voir également:
- Probleme de jointure avc insert into
- Touche insert - Guide
- Disk boot failure insert system disk and press enter - Guide
- Delete avec jointure ✓ - Forum Bases de données
- Ou est la touche "INSERT" ? ✓ - Forum Clavier
- Insert into inner join ✓ - Forum Webmastering
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
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.
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
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
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
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++;
}
?>
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++;
}
?>
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 à
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
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