Aller au contenu

inserer le resultat d'une requete dans une table


Sujets conseillés

Posté

imaginez deux tables :

-1------------------------------------

TH_CONTACT

id_contact (cle, auto-increment.)

nom

prenom

annee (2004,2005,2006,2007)

groupe (tc, tv, ta, tj)

--------------------------------------

-2------------------------------------

TH_EVAL

id_eval (cle, auto-increment.)

id_contact

num_eval

date_eval

critere1

critere2

critere3

critere4

--------------------------------------

Il m'est facile d'afficher depuis la première table les contacts du groupe que je choisis, de l'année que je choisis

Je peux aussi (qd je dis je peux = je sais faire) passer de la liste à la fiche

Je peux aussi (ou du moins je pourrais) passer d'une fiche d'un contact pour faire une évaluation à ce contact

MAIS je voudrais d'un coup , après avoir sélectionné le groupe et l'année - créer une évaluation à tous ceux qui sont sélectionnés

(un peu comme si un enseignant voulais faire un devoir (selon critere1,critere2,critere3,critere4) pour un groupe donné

Question :

Comment, après requete, récupérer l'id_contact de tous ceux qui sont sélectionnés et coller ces id dans la deuxième table?

toujours débutant of course

Posté

Après ta requête, tu te retrouves forcément avec un tableau de valeurs, comportant au moins l'Id.

Il te suffit donc de boucler sur chacune des valeurs, et de faire autant d'insertions que tu as de résultats.

Exemple :

Imaginons que ta requête soit de la forme

$req = mysql_query("SELECT id_contact FROM TH_CONTACT WHERE annee = 2004 AND groupe = 'ta'");

Il te suffit de boucler sur les résultats, et d'alimenter l'autre table :

while($row = mysql_fetch_assoc($req)) {
mysql_query("INSERT INTO TH_EVAL(id_contact, num_eval, date_eval, critere1, critere2, critere3, critere4) VALUES(".$row['id_contact'].", $num_eval, '$date_eval', '$critere1', '$critere2', '$critere3', '$critere4')");
}

Posté

Merci beaucoup pour ta réponse.Maintenant j'ai un autre problème : j'ai fait ce que tu as dit (en l'adaptant)

<?php  

while ($row = mysql_fetch_assoc($Rq))
{
mysql_query
("
INSERT INTO `TH_DEVOIR` ( `id_devoir` , `date` , `num_ccf` , `num_form` , `coeff` , `c1` , `c2` ,
`c3` , `c4` , `c5` , `c6` , `c7` , `c8` , `c9` , `c10` , `id_eleve` )
VALUES (
'', '0', '0', '0', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00',
'0', '0', '0', '0', '0', ' .$row['eleve_id']. ')
");
}
?>

Si je retire ' .$row['id_contact']. ' et que je mets '28' par exemple ; lorsque je vérifie, j'ai bien dans ma base autant d'enregistrement que renvoie ma requete.

y a t il une erreur de code?

Posté

Bonsoir,

dans ta table TH_DEVOIR est-il en auto-increment ?

si c'est le cas, enleve `id_devoir` de ta requete et sa valeur correspondante ''

Posté

oui avec ou sans c'est pareil. D'ailleurs si j'enleve le bout de code '$row['eleve_id']' et que je mets une valeur, ça marche!

je crois plutôt qu'il faut voirpar là : '$row['eleve_id']' ou ' .$row['eleve_id'].'

pourquoi des '.' ? ce n'est pas une concatenation

Posté

En php, une variable '$var' mise entre simples quotes ne sera pas interprétée.

echo '$var' donnera la chaîne "$var" comme résultat au lieu de la valeur de $var :!:

En retirant les quotes (ou en la mettant "hors quotes" comme dans l'exemple, on force php à l'interpréter.

Dan

Posté

oui je commence à comprendre mais comment faire puisque dans la requete on commence par :

mysql_query ("

je sais par (petite) expérience que l'on ne peut mettre des double guillemets à l'intérieur de double guillemets

l' exemple 1 est impossible

 mysql_query 
("
INSERT INTO `TH_DEVOIR` ( `date` , `num_ccf` , `num_form` , `coeff` , `c1` , `c2` ,
`c3` , `c4` , `c5` , `c6` , `c7` , `c8` , `c9` , `c10` , `id_eleve` )
VALUES (
'0', '0', '0', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00',
'0', '0', '0', '0', '0', " $row['eleve_id']"
)
");

et l'exemple 2 n'interprète pas la variable :

 mysql_query 
("
INSERT INTO `TH_DEVOIR` ( `date` , `num_ccf` , `num_form` , `coeff` , `c1` , `c2` ,
`c3` , `c4` , `c5` , `c6` , `c7` , `c8` , `c9` , `c10` , `id_eleve` )
VALUES (
'0', '0', '0', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00',
'0', '0', '0', '0', '0', ' $row['eleve_id']'
)");

Posté
mysql_query

("

INSERT INTO `TH_DEVOIR` ( `date` , `num_ccf` , `num_form` , `coeff` , `c1` , `c2` ,

`c3` , `c4` , `c5` , `c6` , `c7` , `c8` , `c9` , `c10` , `id_eleve` )

VALUES (

'0', '0', '0', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00',

'0', '0', '0', '0', '0', '". $row['eleve_id']."'

)

");

En interrompant la chaîne avec les doubles quotes, insérant la variable (hors des quotes) et en reprenant la chaîne ensuite, comme ci-dessus en rouge.

<edit: merci d'utiliser la balise CODE et /CODE pour délimiter le code dans tes exemples. J'ai utilisé QUOTE pour visualiser la coloration

Cette balise CODE est représentée par # dans les icônes de l'éditeur :)

Clique sur "Aide BBCode" sous les emoticônes à gauche pour des explications supplémentaires>

Posté

Merci vraiment de cette précision qui m'empéchait souvent de comprendre les exemples.

Bien ça fonctionne mais... il y a toujours un mais... cela met la même valeur dans le champ. je re-précise ma question initiale

soit deux tables - la premiere contient les nom et prénom de contacts annee et le groupe (ainsi qu'un id qui s'incrémente de 1)

je voudrais faire une évaluation pour un groupe précis.

1) je sélectionne le groupe et l'annee

2 ) je lance la requete qui doit mettre dans la deuxieme base l'id de chaque contact truouvé

Or dans la requete (qui fonctionne maintenant) cela met le meme id

ps : j'ai pris bonne note pour le code

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...