UPDATER plusieurs lignes à la fois...
Résolu
Bernard
-
Bernard -
Bernard -
A voir également:
- UPDATER plusieurs lignes à la fois...
- Updater - Télécharger - Édition & Programmation
- Aller à la ligne excel - Guide
- Software updater - Télécharger - Optimisation
- Iobit software updater - Télécharger - Pilotes & Matériel
- Driver updater avis ✓ - Forum logiciel systeme
2 réponses
Bonjour
La requête UPDATE utilisée sans condition (WHERE) met à jour toute la table. C'est son fonctionnement normal.
La façon de résoudre ton problème dépend des calculs que tu fais :
- soit le calcul porte sur les autres colonnes et peut être fait en une seule requête SQL, sans WHERE
- soit le calcul est trop compliqué pour être fait en une seule requête, et tu es obligé de faire une requête avec une condition WHERE pour ne modifier qu'une ligne à la fois. Tu dois alors boucler sur toutes tes lignes.
Peux-tu nous dire en quoi consistent tes calculs?
La requête UPDATE utilisée sans condition (WHERE) met à jour toute la table. C'est son fonctionnement normal.
La façon de résoudre ton problème dépend des calculs que tu fais :
- soit le calcul porte sur les autres colonnes et peut être fait en une seule requête SQL, sans WHERE
- soit le calcul est trop compliqué pour être fait en une seule requête, et tu es obligé de faire une requête avec une condition WHERE pour ne modifier qu'une ligne à la fois. Tu dois alors boucler sur toutes tes lignes.
Peux-tu nous dire en quoi consistent tes calculs?
Est-ce que machien1, machine2,... sot des champs de la même table ?
Si oui, et en oubliant le terme calcul2 dont tu ne donnes pas la définition, il suffirait de faire
Pas besoin de boucle, la requête s'applique à chaque ligne de la table, mais en prenant les valeurs des champs de la ligne concernée à chaque fois. Si elle est applicable, c'est la solution la plus efficace.
Si le calcul est trop compliqué, il faut faire une boucle sur les lignes de ta table, et à chaque fois extraire extraire les valeurs dont tu as besoin, faire ton calcul, et faire la mise à jour. La condition du WHERE sera n'importe quoi permettant d'identifiant la ligne sur laquelle tu es en train de travailler, en général les tables ont un champ clé qui sert à ça. S'il n'y a pas de tel champ dans ta table, ça justifie d'en créer un.
(en espérant que je ne me trompe pas trop, j'utilise PDO depuis peu)
Si oui, et en oubliant le terme calcul2 dont tu ne donnes pas la définition, il suffirait de faire
$req = $bdd->exec ("UPDATE test SET Prev_mois_en_cours=ROUND(machine1+machine2+machine3+machine4+machine5,1)");
Pas besoin de boucle, la requête s'applique à chaque ligne de la table, mais en prenant les valeurs des champs de la ligne concernée à chaque fois. Si elle est applicable, c'est la solution la plus efficace.
Si le calcul est trop compliqué, il faut faire une boucle sur les lignes de ta table, et à chaque fois extraire extraire les valeurs dont tu as besoin, faire ton calcul, et faire la mise à jour. La condition du WHERE sera n'importe quoi permettant d'identifiant la ligne sur laquelle tu es en train de travailler, en général les tables ont un champ clé qui sert à ça. S'il n'y a pas de tel champ dans ta table, ça justifie d'en créer un.
(en espérant que je ne me trompe pas trop, j'utilise PDO depuis peu)
$req = $bdd->prepare ("UPDATE test SET Prev_mois_en_cours=:nv_Prev_mois_en_cours WHERE id=:id"); $stmt1=query (SELECT * FROM test); while (($donnees=$stmt1->fetch(PDO:FETCH_ASSOC)) !== false) { // savants calculs sur ce que tu veux faire $req->execute (array ('nv_Prev_mois_en_cours'=>$resultat_des_savants_calculs, 'id'=>$donnees['id'])); } $stmt1 -> closeCursor();
Mes calculs utilisent les données de la même table. Voici par exemple le calcul 1 :
C'est un calcul tout bête et même en utilisant un WHERE, je ne vois pas quoi mettre derrière...
Dernière chose, la valeur retournée (qui est donc toujours la même) est bonne pour la dernière ligne de ma table. C'est donc le résultat de la dernière ligne qui est reporté sur les autres.
Merci pour votre aide.