Extraire les produits qui n'ont pas une qte dans un mois donnée
Fermé
LearnDeep
Messages postés
67
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
21 août 2021
-
11 août 2021 à 20:02
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 13 août 2021 à 09:54
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 13 août 2021 à 09:54
A voir également:
- Extraire les produits qui n'ont pas une qte dans un mois donnée
- Extraire une video youtube - Guide
- Ryanair produits interdits en cabine - Guide
- Extraire son d'une video - Guide
- Excel mois en lettre ✓ - Forum Excel
- Extraire image pdf - Guide
2 réponses
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
Ambassadeur
1 551
12 août 2021 à 08:19
12 août 2021 à 08:19
bonjour,
je pense que ta base de données est mal conçue. moi je travaillerais avec trois tables:
une table produits
une table mois
une table production
ce qui me permettrait de faire une requête qui me fournit le résultat attendu.
je pense que ta base de données est mal conçue. moi je travaillerais avec trois tables:
une table produits
une table mois
une table production
ce qui me permettrait de faire une requête qui me fournit le résultat attendu.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
12 août 2021 à 09:14
12 août 2021 à 09:14
Bonjour,
Exécuter une requête sql dans une boucle est souvent une mauvaise pratique si on peut faire autrement. Dans ton cas on peut facilement remplacer la boucle et les 12 requêtes en une seule.
Pour récupérer tous les enregistrements pour lesquels la colonne month peut avoir plusieurs valeurs, il faudrait plutôt utiliser l'opérateur IN à la place de l'opérateur = dans la clause WHERE de la requête sql.
Par exemple au lieu d'exécuter 12 fois la requête dans la boucle :
On peut exécuter une seule requête équivalente comme ceci :
Ce qui pourrais donner pour ton code :
Si tu veux récupérer tous les enregistrements peu importe la valeur de month, tu peux simplement supprimer la clause WHERE sur cette colonne, soit :
Bonne journée,
Exécuter une requête sql dans une boucle est souvent une mauvaise pratique si on peut faire autrement. Dans ton cas on peut facilement remplacer la boucle et les 12 requêtes en une seule.
Pour récupérer tous les enregistrements pour lesquels la colonne month peut avoir plusieurs valeurs, il faudrait plutôt utiliser l'opérateur IN à la place de l'opérateur = dans la clause WHERE de la requête sql.
Par exemple au lieu d'exécuter 12 fois la requête dans la boucle :
SELECT * FROM production WHERE MONTH(date) = 1 SELECT * FROM production WHERE MONTH(date) = 2 //etc...
On peut exécuter une seule requête équivalente comme ceci :
SELECT * FROM production WHERE MONTH(date) IN (1, 2, 3, etc...)
Ce qui pourrais donner pour ton code :
// [...] $prods = array(); $months = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); $monthsString = implode(', ', $months); // string(37) "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12" $stmt = $this->conn->prepare("SELECT sum(qte) as total,ligne, produit,date,heure,qte FROM production where YEAR(date) = ? and MONTH(date) IN (?) group by LOWER(ligne) "); $stmt->execute([$year, $monthsString]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($results as $row){ array_push($prods, new ProductionByMonth(0,$row["ligne"],$row["produit"],$row["date"],$row["heure"],$row["qte"],$month,$year)); } echo json_encode($prods);
Si tu veux récupérer tous les enregistrements peu importe la valeur de month, tu peux simplement supprimer la clause WHERE sur cette colonne, soit :
// [...] $prods = array(); $stmt = $this->conn->prepare("SELECT sum(qte) as total,ligne, produit,date,heure,qte FROM production where YEAR(date) = ? group by LOWER(ligne) "); $stmt->execute([$year]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($results as $row){ array_push($prods, new ProductionByMonth(0,$row["ligne"],$row["produit"],$row["date"],$row["heure"],$row["qte"],$month,$year)); } echo json_encode($prods);
Bonne journée,
LearnDeep
Messages postés
67
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
21 août 2021
12 août 2021 à 11:56
12 août 2021 à 11:56
Bonjour , merci pour la réponse , je veux dire que les produits enregistrés enregistrés dans la base de données sont seulement qui ont une qte > 0 , mon but est de copier coller ces produits pour les mois que ces produits ne sont pas liés et mettre la valeure qte a zéro , est ce que cette solution peut faire ça?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
>
LearnDeep
Messages postés
67
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
21 août 2021
12 août 2021 à 14:05
12 août 2021 à 14:05
Je ne suis pas sûr d'avoir bien compris ta demande. Quand tu indiques "mon but est de copier coller les produits pour les mois [sans produits ?] et mettre la valeur qte à 0", est-ce tu veux dupliquer les enregistrements dans la base ou seulement mettre à jour les enregistrements déjà présents dans la base ?
Si il s'agit du deuxième cas, il faudrait faire une requête UPDATE par exemple comme ceci :
Je suppose que la valeur est null si la colonne month n'est pas renseigné dans l'enregistrement. Si il s'agit d'une chaine vide, il faudra corriger la comparaison dans la clause where (WHERE month = '').
Si il s'agit du deuxième cas, il faudrait faire une requête UPDATE par exemple comme ceci :
UPDATE production SET qte = 0 WHERE month = null
Je suppose que la valeur est null si la colonne month n'est pas renseigné dans l'enregistrement. Si il s'agit d'une chaine vide, il faudra corriger la comparaison dans la clause where (WHERE month = '').
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
>
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
12 août 2021 à 21:19
12 août 2021 à 21:19
la demande me semble claire, je pense que tu l'entraines, depuis le début, sur de fausses pistes.
prends le temps de relire la demande initiale.
prends le temps de relire la demande initiale.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
>
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
13 août 2021 à 09:54
13 août 2021 à 09:54
En effet merci pour le rappel yg_be et désolé LearnDeep, j'ai lu trop vite et les solutions que j'ai proposées ne correspondent pas à la demande initiale.
La première remarque de yg_be est la meilleure réponse, tu devrais vraiment suivre son conseil et réorganiser tes données dans plusieurs tables en utilisant le modèle relationnel.
Avoir une base avec des données bien organisées va beaucoup simplifier les traitements en php.
La première remarque de yg_be est la meilleure réponse, tu devrais vraiment suivre son conseil et réorganiser tes données dans plusieurs tables en utilisant le modèle relationnel.
Avoir une base avec des données bien organisées va beaucoup simplifier les traitements en php.