Page 1 sur 2

enregistrement requete dans un champ??

Posté : 28 juil. 2005, 11:04
par Justone
Bonjour

J'ai une petite question :
Comment faire pour enregistrer le résultat d'une requete dans un champ d'une table?

Merci

Posté : 28 juil. 2005, 11:18
par mere-teresa
Refaire une requête.

Posté : 28 juil. 2005, 11:23
par Justone
Ban alors je m'explique :

VOici ma requete:
"SELECT DISTINCT c.responsibility_name 
 FROM fnd_user a, fnd_user_resp_groups b, fnd_responsibility_tl c
 WHERE a.user_name = '".$_GET['username']."'
   AND b.user_id = a.user_id
   AND b.responsibility_id = c.responsibility_id
   AND (b.end_date is null or b.end_date > sysdate)
   AND b.start_date < sysdate";
//On execute la requête en lui passant l'option OCI_DEFAULT
ociexecute($stmt);
//On parcourt les résultats et on affiche les champs
while (ocifetch($stmt)) { 
	echo ociresult($stmt,1)."<br>"; 
} 

Je voudrais enregistrer le résultat de cette requete dans le champs droits:
"UPDATE oracle SET droits=??? WHERE CONCAT(nom,' ',prenom)='".$_SESSION['id']."'"; 
Comment faire?

Merci

Posté : 28 juil. 2005, 12:05
par raptor
La question est deja de savoir sous quelle forme tu souhaite stocker ton truc : chaine, tableau ... ?

Posté : 28 juil. 2005, 12:06
par Justone
Le résultat c'est du texte

Je veux enregistrer ca dans le champ droits, je pense en format TEXT

Posté : 28 juil. 2005, 12:14
par raptor
while (ocifetch($stmt)) {
    $var =  ociresult($stmt,1);
   //ici tu fais la requete oracle d'update : "UPDATE oracle SET droits=".$var." WHERE CONCAT(nom,' ',prenom)='".$_SESSION['id']."'";
}
si j'ai bien compris ce que tu veux :? lol

Posté : 28 juil. 2005, 12:20
par Justone
Oui c'est bien ca!

Mais lorsque je fais la boucle d'affichage et que je l'affiche j'obtiens plusieurs lignes.

Avec ta méthode seul la dernière ligne est enregistré dans le champ droits de ma table.

Comment faire pour enregistrer toutes les lignes dans mon champ?

Merci

Posté : 28 juil. 2005, 12:24
par mere-teresa
Ben mettre ta requete dans la boucle

Posté : 28 juil. 2005, 12:24
par raptor
alors dans ce cas, tu fait du style
while (ocifetch($stmt)) {
   if (isset($var)) $var.= ociresult($stmt,1)."<br>";
   else $var = ociresult($stmt,1)."<br>";
}

   //ici tu fais la requete oracle d'update : "UPDATE oracle SET droits=".$var." WHERE CONCAT(nom,' ',prenom)='".$_SESSION['id']."'"; 
@+

Posté : 28 juil. 2005, 12:34
par pascaltje
fais un update avec une jointure.
=> une seule et unique requete


A+

Pascal

Posté : 28 juil. 2005, 14:24
par Justone
grrr. j'y arrive pas!

toujours uniquement la dernière ligne qui s'enregistre

Posté : 28 juil. 2005, 14:54
par mere-teresa
dans la boucle...ou concatène les valeurs à insérer

Posté : 28 juil. 2005, 14:56
par Justone
Voici ma boucle :
while (ocifetch($stmt)) { 
	$droits = ociresult($stmt,1)."<br>"; 

require_once('../../connections/reseau.php'); // permet d'avoir les informations de connection à la base
mysql_select_db("reseau") or die("Impossible de trouver la base");
$query = "UPDATE oracle SET droits='$droits' WHERE CONCAT(nom,' ',prenom)='".$_SESSION['id']."'"; 
$result = mysql_query($query);
} 
Comme c'est une requete UPDATE, seul la derniere ligne est enregistrée.

Sinon comment je dois faire pour concaténer les lignes?

Merci

Posté : 28 juil. 2005, 14:58
par mere-teresa
ajoute dans la boucle un echo de ta requête : tu verras combien de fois elle passe dedans...et pis n'aurais-tu qu'un seul résultat ?

Posté : 28 juil. 2005, 15:00
par Justone
elle passe 3 fois, pour l'exemple que je teste je devrais avoir 3 lignes d'enregistrées...