Faire un INSERT INTO selon la valeur d'un champ
Shelhyan
Messages postés
11
Statut
Membre
-
Shelhyan Messages postés 11 Statut Membre -
Shelhyan Messages postés 11 Statut Membre -
Bonjour,
J'ai fais une requête INSERT INTO qui insère autant de lignes que de produits commandés dans ma commande fournisseur courante. Elle fonctionne très bien. Ce que j'aimerai au final, c'est que ma requête fasse ceci, mais je voudrai que l'INSERT crée pour une ligne produit, avec une quantité = 3, 3 lignes. quantité = 2 sur la ligne suivante de la CFR, 2 lignes. Donc il ne s'agirait plus d'un INSERT pour chaque ligne produit commandé, mais pour chAque ligne ET selon la quantité commandée. Je vous montre ma requête actuelle, qui crée une ligne par ligne produit.
J'ai fais une requête INSERT INTO qui insère autant de lignes que de produits commandés dans ma commande fournisseur courante. Elle fonctionne très bien. Ce que j'aimerai au final, c'est que ma requête fasse ceci, mais je voudrai que l'INSERT crée pour une ligne produit, avec une quantité = 3, 3 lignes. quantité = 2 sur la ligne suivante de la CFR, 2 lignes. Donc il ne s'agirait plus d'un INSERT pour chaque ligne produit commandé, mais pour chAque ligne ET selon la quantité commandée. Je vous montre ma requête actuelle, qui crée une ligne par ligne produit.
function createAssetsFromPO($entity, $currentUser)
{
global $adb;
$cfr = vtws_getIdComponents($entity->getId());
$cfr = $cfr[1];
$currentUser = Users_Record_Model::getCurrentUserModel();
$current_user_id=$currentUser->get('user_name');
$assetManagement = "Oui";
$sql = $adb->pquery("
INSERT INTO table_test (test, color, infos, non_liaison, statut, Nomcompte, Assignement)
SELECT productname, vtiger_inventoryproductrel.productid, 'À renseigner', productname, 'In Service', '31072', ?
FROM vtiger_inventoryproductrel, vtiger_productcf, vtiger_products
WHERE vtiger_inventoryproductrel.productid = vtiger_productcf.productid
AND vtiger_productcf.productid = vtiger_products.productid
AND vtiger_inventoryproductrel.id =
(SELECT purchaseorderid
FROM vtiger_purchaseorder
WHERE purchaseorderid = ?)
AND vtiger_productcf.cf_1929 = ?",
array($current_user_id, $cfr, $assetManagement));
}
7 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
nous as-tu expliqué d'où venait cette quantité? -
D'accord, pourrais tu me donner la syntaxe pour faire cela ? J'avoue que je suis débutante et je nage un peu. La requête pour déterminer la quantité, je l'ai :
$qty = $adb->pquery("
SELECT quantity
FROM vtiger_inventoryproductrel, vtiger_productcf, vtiger_products
WHERE vtiger_inventoryproductrel.productid = vtiger_productcf.productid
AND vtiger_productcf.productid = vtiger_products.productid
AND vtiger_inventoryproductrel.id =
(SELECT purchaseorderid
FROM vtiger_purchaseorder
WHERE purchaseorderid = ?)
AND vtiger_productcf.cf_1929 = ?",
array($cfr, $assetManagement));
Mais comment l'utiliser dans une boucle ?-
suggestion, non testée:
$sqlsource = " INSERT INTO table_test (test, color, infos, non_liaison, statut, Nomcompte, Assignement) SELECT productname, vtiger_inventoryproductrel.productid, 'À renseigner', productname, 'In Service', '31072', ? FROM vtiger_inventoryproductrel, vtiger_productcf, vtiger_products WHERE vtiger_inventoryproductrel.productid = vtiger_productcf.productid AND vtiger_productcf.productid = vtiger_products.productid AND vtiger_inventoryproductrel.id = (SELECT purchaseorderid FROM vtiger_purchaseorder WHERE purchaseorderid = ?) AND vtiger_productcf.cf_1929 = ?"; $sqlparams= array($current_user_id, $cfr, $assetManagement)); $qtyrow1 = $qty->fetch(); $quantite= $qtyrow1[0]; for ($i = 1; $i <= $quantite; $i++) { $sql = $adb->pquery($sqlsource, $sqlparams); }
-
-
Ceci ne fonctionne pas.. Mes deux requêtes fonctionnent bien, mais la boucle ne va pas. Connais tu une autre syntaxe ?
-
Non je n'ai pas pu vérifier.. Enfaite la fonction ne passe pas dans la boucle du tout; du coup je n'ai pas pu récupérer la valeur. Sur phpmyadmin, la requête amène bien les valeurs attendues.
Je suis paumée, désolé si j'explique mal la situation :/ -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
function createAssetsFromPO($entity, $currentUser)
{
global $adb;
$cfr = vtws_getIdComponents($entity->getId());
$cfr = $cfr[1];
$currentUser = Users_Record_Model::getCurrentUserModel();
$current_user_id=$currentUser->get('user_name');
$assetManagement = "Oui";
$qty = $adb->pquery("
SELECT quantity
FROM vtiger_inventoryproductrel, vtiger_productcf, vtiger_products
WHERE vtiger_inventoryproductrel.productid = vtiger_productcf.productid
AND vtiger_productcf.productid = vtiger_products.productid
AND vtiger_inventoryproductrel.id =
(SELECT purchaseorderid
FROM vtiger_purchaseorder
WHERE purchaseorderid = ?)
AND vtiger_productcf.cf_1929 = ?",
array($cfr, $assetManagement));
$sqlsource = "
INSERT INTO table_test (test, color, infos, non_liaison, statut, Nomcompte, Assignement)
SELECT productname, vtiger_inventoryproductrel.productid, 'À renseigner', productname, 'In Service', '31072', ?
FROM vtiger_inventoryproductrel, vtiger_productcf, vtiger_products
WHERE vtiger_inventoryproductrel.productid = vtiger_productcf.productid
AND vtiger_productcf.productid = vtiger_products.productid
AND vtiger_inventoryproductrel.id =
(SELECT purchaseorderid
FROM vtiger_purchaseorder
WHERE purchaseorderid = ?)
AND vtiger_productcf.cf_1929 = ?";
$sqlparams= array($current_user_id, $cfr, $assetManagement));
$qtyrow1 = $qty->fetch();
$quantite= $qtyrow1[0];
for ($i = 1; $i <= $quantite; $i++) {
$sql = $adb->pquery($sqlsource, $sqlparams);
}
}
Voici le code de ma fonction. -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
peux-tu préciser le langage (php) quand tu utilises les balises de code? explications: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
le soucis est probablement dans les deux lignes:$qtyrow1 = $qty->fetch(); $quantite= $qtyrow1[0];
ne peux-tu pas récupérer la valeur de$quantite
? -
Oui dsl je le ferai ! Oui le soucis vient surement d'içi. Enfin de compte, le résultat est qu'aucune ligne n'est ajouter par mon INSERT. Comme si du coup il récupère une valeur nulle pour $quantite. et il ne rentre pas dans la boucle, au final il ne ce passe rien du tout.