Faire un INSERT INTO selon la valeur d'un champ
Shelhyan
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
Shelhyan Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Shelhyan Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
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));
}
A voir également:
- Faire un INSERT INTO selon la valeur d'un champ
- Touche insert - Guide
- Disk boot failure insert system disk and press enter - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Excel couleur cellule selon valeur - Guide
- Pas de touche insert sur mon clavier - Forum Clavier
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
nous as-tu expliqué d'où venait cette quantité?
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 :
Mais comment l'utiliser dans une boucle ?
$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 :/
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 questionfunction 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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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:
ne peux-tu pas récupérer la valeur de
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?
Ensuite, faire une boucle en php pour appeler plusieurs fois pquery pour faire plusieurs INSERT.