Récupération résultat requête dans seconde requête

Fermé
Shelhyan - 16 mars 2021 à 15:59
 Manueel01 - 4 nov. 2021 à 15:49
Bonjour,

Je dois récupérer un Id via une requête SQL et ensuite faire une requête Update avec les lignes concernant ce même Id.

Ma requête d'Update est la suivante :

$update = "UPDATE vtiger_potentialscf
SET vtiger_potentialscf.cf_1096 = (SELECT SUM(total) FROM vtiger_quotes WHERE potentialid = potentialid AND quotestage != 'Corrigé')
WHERE potentialid = potentialid";

$adb->pquery($update);

Ici, potentialid est l'Id que je souhaite récupérer, car en l'état, il n'arrive pas à le récupérer.
Je souhaite le récupérer via :
$potentialId = "SELECT potentialid FROM vtiger_quotes WHERE quoteid = quoteid";

Comment faire et dans quel ordre ?

Merci beaucoup,



Configuration: Windows / Chrome 88.0.4324.190
A voir également:

6 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
16 mars 2021 à 17:34
Bonjour,

. as tu testé tes requêtes DIRECTEMENT dans ta bdd pour voir si elles fonctionnent avant d'essayer de les mettre dans ton code php ? ... car c'est la première chose à faire.

Et puis
WHERE quoteid = quoteid

... ici .. le second "quoteid" .. ça ne serait pas plutôt une variable ou une valeur qui devrait s'y trouver ?
car sinon.. ta requête ne veut rien dire ...

Et quit à faire deux requêtes ( pour trouver l'id ...) autant récupérer le Somme en même temps non ?

Bref :
Il faut que tu nous précises le langage utilisé
La structure de tes tables
Les éventuelles valeurs des variables que tu utilises
Si c'est bien sqlserver que tu utilises ( ou mysql ? )
Avec quoi as tu fais la connexion à ta bdd ... je ne connais pas pquery ....





0
Shelhyan Messages postés 11 Date d'inscription mardi 16 mars 2021 Statut Membre Dernière intervention 7 avril 2021
17 mars 2021 à 09:33
Bonjour,

Merci de ta réponse.
Alors le langage c'est PHP, et j'utilise mysql.
J'ai fais la connexion à la BDD par PDO.

J'ai testé ma requête dans la BDD en mettant en dur l'id de l'affaire que je souhaite utiliser, et ma requête fonctionne.
Enfin decompte, je travaille dans la table des affaires, et je souhaite récupérer l'id d'un devis relié à une affaire. Et c'est là que ça bloque. J'ai du mal a expliquer désolé, je pateauge bien comme il faut..

Ma requête
$update = "UPDATE vtiger_potentialscf
SET vtiger_potentialscf.cf_1096 = (SELECT SUM(total) FROM vtiger_quotes WHERE potentialid = potentialid AND quotestage != 'Corrigé')
WHERE potentialid = potentialid";

Met à jour TOUTES les affaires avec la somme de TOUT les devis de l'entreprise, autant dire, une boulette ^^

Je veux qu'elle mette à jour l'affaire concernée avec la somme des devis qui lui sont reliés..
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
17 mars 2021 à 10:34
Merci d'utiliser les balises de code lorsque tu poste du code sur le forum.
Ta question concernant PHP et MySQL je la déplace dans le bon forum...

et pour finir, il nous faut le reste de ton code sinon on ne pourra jamais s'en sortir.
0
Shelhyan Messages postés 11 Date d'inscription mardi 16 mars 2021 Statut Membre Dernière intervention 7 avril 2021
17 mars 2021 à 11:16
Voici mon code. C'est une custom function au sein du CRM Vtiger.

<?php

function updateQuotesAmount()
{
//BDD CONNEXION
try
{
if ($bdd = new PDO('mysql:host=localhost;dbname=****;charset=utf8', '****', '*******'))
{
echo "Connection to ***** successfull \n";
}
else
{
echo "Connection to ****** failed\n";
}

}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

//UPDATE QUOTES AMOUNTS POTENTIAL

global $adb;

/*$potentialId = "SELECT potentialid FROM vtiger_quotes WHERE quoteid = quoteid";
$result = mysql_query($potentialId);*/

$update = "UPDATE vtiger_potentialscf SET vtiger_potentialscf.cf_1096 = (SELECT SUM(total) FROM vtiger_quotes WHERE vtiger_quotes.potentialid = vtiger_potential.potentialid AND quotestage != 'Corrigé') WHERE vtiger_quotes.potentialid = vtiger_potential.potentialid";
$adb->pquery($update);

}

updateQuotesAmount();

//CONNEXION CLOSE
$bdd->null;

?>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
17 mars 2021 à 12:13
C'est du pdo... Et tu as des instructions
mysql_query
???
0
Shelhyan Messages postés 11 Date d'inscription mardi 16 mars 2021 Statut Membre Dernière intervention 7 avril 2021 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
17 mars 2021 à 12:19
J'avoue que je n'ai pas vraiment idée de ce que je fais là. J'ai repris la custom que quelqu'un a fait et l'ai modifier pour mon utilisation, mais du coup c'est dans tout les cas nul..

Je vais essayer de reprendre ça du début et voir quelle manière propre utuliser. peux tu me dire si je peux récupérer le résultat d'une requête SQL dans une variable afin de réutiliser cette variable dans une autre requête ? Où il faut passer par une seule et même requête, et dans ce cas là, comment faire un update avec un select imbriqué pour la récupération d'un élément d'une autre table que celle où le update fera l'action ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > Shelhyan Messages postés 11 Date d'inscription mardi 16 mars 2021 Statut Membre Dernière intervention 7 avril 2021
17 mars 2021 à 14:15
DOnc
Dans le code que tu nous montres ...
La connexion PDO .. non utilisée par la suite .. donc .. inutile
L'instruction mysql_query .. ce n'est pas du PDO ... donc à virer

Par contre, ce CRM semble mettre à disposition la variable $adb
Il serait bien de savoir ce que fait la méthode pquery
$adb->pquery()

Savoir ce qu'elle attend comme paramètre(s)
Savoir ce qu'elle retourne comme résultat ...

Sans ça... impossible d'avancer.

Je reviens ensuite sur tes requêtes ... dans ton where .. tu ne lui passe AUCUNE variable .... ou alors.. tu as oublié le signe $ devant quoteid
... et puis.. elle vient d'où cette variable ? Ce n'est pas un paramètre de la fonction.... donc elle se trouve où lorsque tu appelles cette fonction ??
0
Shelhyan Messages postés 11 Date d'inscription mardi 16 mars 2021 Statut Membre Dernière intervention 7 avril 2021
Modifié le 19 mars 2021 à 09:47
Alors, j'ai modifié ma requête, et voilà où j'en suis. La MAJ du montant des devis dans les Affaires, avec la somme des devis reliés à cette affaire, se fait corectement. Le soucis maintenant, c'est qu'elle se fait dans toutes les affaires en même temps, au lieu de se faire uniquement dans l'affaire reliée au devis qui est éditer.

Donc voilà ma requête :

//UPDATE SALESORDER AMOUNTS POTENTIAL
function updateSalesOrderAmount()
{
//BDD CONNEXION
 try
 {
  if ($bdd = new PDO('mysql:host=localhost;dbname=******;charset=utf8', '****', '*******'))
   {
     echo   "Successfull";
   }
   else
   {
     echo   "Failed";
   }
   
 } 
 catch (Exception $e)
 {
         die('Erreur : ' . $e->getMessage());
 }

//SQL REQUEST
$quoteStage = "Corrigé";

$updateQ = $bdd->prepare("UPDATE vtiger_potentialscf 
INNER JOIN vtiger_quotes 
SET vtiger_potentialscf.cf_1096 = 
(SELECT SUM(total) 
FROM vtiger_quotes 
WHERE vtiger_quotes.potentialid = vtiger_potentialscf.potentialid 
AND quotestage != :quoteStage) 
WHERE vtiger_potentialscf.potentialid = vtiger_quotes.potentialid");

$updateQ->execute(array('quoteStage' => $quoteStage));

}   

EDIT : Correction des balises de code ( ajout du LANGAGE pour avoir la coloration syntaxique et la numération des lignes de code )

Je souhaite récupérer l'id du devis qui est édité au lancement de la requête, pour que celle ci se fasse uniquement dans l'affaire reliée, et non toutes les affaires de l'entreprise. Les montants sont toutefois bons dans toutes les affaires.

Comment récupérer l'id du devis et celui de l'affaire relié au devis ? Et comment l'utiliser dans ma requête ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 mars 2021 à 09:49
Bonjour,

Il faudrait savoir comment est lancé cette fonction ... et voir si tu peux lui passer en paramètre l'id correspondant.
Mais là .. ça n'a rien à voir avec mysql ou le php à proprement parlé ... c'est plus une question de connaissance du fonctionnement du cms que tu utilises.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Shelhyan Messages postés 11 Date d'inscription mardi 16 mars 2021 Statut Membre Dernière intervention 7 avril 2021
19 mars 2021 à 09:57
Elle est lancé via un Workflow, à la mise à jour d'un devis. J'utilise Vtiger comme CRM. J'ai essayer beaucoup de choses différentes, mais je n'arrive pas à récupérer cet id..
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 mars 2021 à 10:40
Oui ben faut regarder comment marche Vtiger
Je ne connais pas ce CRM ...
0
j'ai déjà essayé Vtiger mais âpre que j'ai teste mon nouveau crm Bitrix24 je trouve que c'est tellement facile et simple, je vous le recommande vivement www.moncrm.ma
0