Afficher une seule occurrence des lignes qui ont les mêmes valeurs
Fermé
europe21
Messages postés
63
Date d'inscription
mardi 26 décembre 2017
Statut
Membre
Dernière intervention
4 février 2024
-
16 août 2020 à 10:48
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024 - 24 août 2020 à 14:23
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024 - 24 août 2020 à 14:23
A voir également:
- Afficher une seule occurrence des lignes qui ont les mêmes valeurs
- Comment imprimer un tableau excel sur une seule page - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Powerpoint changer orientation d'une seule diapositive - Forum Powerpoint
- Télé qui s'allume toute seule à 3h - Forum TV & Vidéo
8 réponses
jee pee
Messages postés
40458
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
18 novembre 2024
9 420
Modifié le 16 août 2020 à 11:28
Modifié le 16 août 2020 à 11:28
Bonjour,
Le sql ne permet pas directement d'avoir ce que tu souhaites, remplace le group by par un order by. C'est à toi, dans la boucle d'affichage, de tester si l'id courant est le même que le précédent (que tu auras sauvegardé dans l'itération précédente) et dans ce cas ne pas l'afficher.
Le sql ne permet pas directement d'avoir ce que tu souhaites, remplace le group by par un order by. C'est à toi, dans la boucle d'affichage, de tester si l'id courant est le même que le précédent (que tu auras sauvegardé dans l'itération précédente) et dans ce cas ne pas l'afficher.
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
4 704
16 août 2020 à 12:00
16 août 2020 à 12:00
Bonjour,
Si je comprends bien ce que tu veux faire, c'est afficher, pour chaque adhérent, la qte total de produit ( de chaque produit ) commandé ?
Donc, oui, le groupe by serait la solution... surtout pour faire la somme des qte...
Une fois la requête exécutée, le plus simple c'est de retravailler l'array dans le controller avant de l'envoyer à la vue.
un truc du gerne
Niveau twig, ensuite, ça devrait donner un truc du style
et en cas de besoin pour voir ce que te contient tes variables.. n'hésites pas à faire des dump
Si je comprends bien ce que tu veux faire, c'est afficher, pour chaque adhérent, la qte total de produit ( de chaque produit ) commandé ?
Donc, oui, le groupe by serait la solution... surtout pour faire la somme des qte...
SELECT adherentId ,produitId , SUM(qte) as TOTAL_QTE FROM App\Entity\Commande GROUP BY adherentId, produitId
Une fois la requête exécutée, le plus simple c'est de retravailler l'array dans le controller avant de l'envoyer à la vue.
un truc du gerne
$out = array(); foreach($commandes as $C){ $out[$C['adherentId']][$C['produitId']] = $C['TOTAL_QTE']; } return $this->render('admin/commande/a-commandes.html.twig', [ 'commandes' => $out ]);
Niveau twig, ensuite, ça devrait donner un truc du style
{% for adherentId,c in commandes %} {{adherentId}} </br> {%for prd,qte in c %} {{prd}} {{qte}} </br> {% endfor %} {% endfor %}
et en cas de besoin pour voir ce que te contient tes variables.. n'hésites pas à faire des dump
jee pee
Messages postés
40458
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
18 novembre 2024
9 420
16 août 2020 à 12:01
16 août 2020 à 12:01
Là tu es sur un autre cas, et il faudrait voir la requête car là il est possible en sql par un group by d'avoir le total. Comme
Et pour le traiter à la main dans la boucle, il faut accumuler les qte, et on affiche le total que quand dans la boucle on change de produit (et quand on est sorti de la boucle, afficher le dernier produit traité).
select commande, produit, sum(qte) from table group by commande, produit
Et pour le traiter à la main dans la boucle, il faut accumuler les qte, et on affiche le total que quand dans la boucle on change de produit (et quand on est sorti de la boucle, afficher le dernier produit traité).
europe21
Messages postés
63
Date d'inscription
mardi 26 décembre 2017
Statut
Membre
Dernière intervention
4 février 2024
Modifié le 16 août 2020 à 11:47
Modifié le 16 août 2020 à 11:47
Ok merci. Mais est possible d 'aditionner directement dans ma vue un champs dans ma boucle. Par exemple j'affiche touttes les commandes faites pour un short rouge. Mais au lieu d'avoir ca :
short rouge 1
short rouge 1
short rouge 3
Je voudrai :
short rouge 5
donc dans ma boucle :
Une fois que je lui aurais dit de n'afficher qu'une seule occurrence de mon article je voudrais additionner la variable c.qte
Mais je ne vois pas comment faire.
short rouge 1
short rouge 1
short rouge 3
Je voudrai :
short rouge 5
donc dans ma boucle :
{% for c in commande %}
<tbody>
{% if c.dateattribution == null %}
<td class="text-center">{{c.produit.title}}</td>
<td class="text-center">{{c.produit.code}}</td>
<td class="text-center">{{c.produit.categoryproduit.title}}</td>
<td class="text-center">
<span class="">{{c.qte}}</span>
</td>
{% endif %}
</tbody>
</tr>
{% endfor %}
Une fois que je lui aurais dit de n'afficher qu'une seule occurrence de mon article je voudrais additionner la variable c.qte
Mais je ne vois pas comment faire.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
europe21
Messages postés
63
Date d'inscription
mardi 26 décembre 2017
Statut
Membre
Dernière intervention
4 février 2024
Modifié le 16 août 2020 à 13:08
Modifié le 16 août 2020 à 13:08
J'ai essayé:
mon controller:
mon twig:
J'ai remplacé prd par produitId car je ne comprenais pas d'ou le prd venait.
Je n'ai toujours pas d'erreur mais rien ne s'affiche.
Le var dump de $out me donne un tableau vide: array(0) { }
mon controller:
public function Acommande(ObjectManager $manager)
{
$repo = $this->getDoctrine()->getRepository(Commande::class);
$commande = $repo->findAll();
$commandes = $manager->createQuery('SELECT adherentId
,produitId
, SUM(qte) as TOTAL_QTE
FROM App\Entity\Commande
GROUP BY adherentId, produitId');
$out = array();
foreach($commandes as $C){
$out[$C['adherentId']][$C['produitId']] = $C['TOTAL_QTE'];
}
var_dump($out);
return $this->render('admin/commande/a-commandes.html.twig', [
'commande' => $commande,
'commandes' => $out
]);
}
}
mon twig:
{% for adherentId,c in commandes %}
{{adherentId}} </br>
{% for produitId,qte in c %}
{{produitId}}
{{qte}}
</br>
{% endfor %}
{% endfor %}
J'ai remplacé prd par produitId car je ne comprenais pas d'ou le prd venait.
Je n'ai toujours pas d'erreur mais rien ne s'affiche.
Le var dump de $out me donne un tableau vide: array(0) { }
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
4 704
24 août 2020 à 13:09
24 août 2020 à 13:09
Il manque le ->getResult() après ton >createQuery non ?
Normal que $out soit vide...
Normal que $out soit vide...
europe21
Messages postés
63
Date d'inscription
mardi 26 décembre 2017
Statut
Membre
Dernière intervention
4 février 2024
>
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
24 août 2020 à 13:35
24 août 2020 à 13:35
Je viens d'essayer avec le getResult(); et c'a me met une erreur:
[Syntax Error] line 0, col 82: Error: Expected end of string, got 'BY'
[Syntax Error] line 0, col 82: Error: Expected end of string, got 'BY'
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
4 704
>
europe21
Messages postés
63
Date d'inscription
mardi 26 décembre 2017
Statut
Membre
Dernière intervention
4 février 2024
24 août 2020 à 13:45
24 août 2020 à 13:45
Montres le code que tu as écrit .... ( et cette fois... merci d'indiquer le LANGAGE dans les balises de code )
NB: Pour utiliser les balises de code correctement... merci de lire ENTIEREMENT le lien ci-dessous :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
NB: Pour utiliser les balises de code correctement... merci de lire ENTIEREMENT le lien ci-dessous :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
europe21
Messages postés
63
Date d'inscription
mardi 26 décembre 2017
Statut
Membre
Dernière intervention
4 février 2024
19 août 2020 à 07:43
19 août 2020 à 07:43
Salut,
Je bloque toujours.
Je n'ai toujours pas d'erreur mais rien ne s'affiche.
Le var dump de $out me donne un tableau vide: array(0) { }
Je bloque toujours.
Je n'ai toujours pas d'erreur mais rien ne s'affiche.
Le var dump de $out me donne un tableau vide: array(0) { }
europe21
Messages postés
63
Date d'inscription
mardi 26 décembre 2017
Statut
Membre
Dernière intervention
4 février 2024
23 août 2020 à 18:43
23 août 2020 à 18:43
Je suis partie sur une autre logique , je suis presque au bout mais j'ai encore un souci:
mon controller:
mon twig:
le resultat:
Short rouge 1
Short vert 1
chaussure verte 1
t shirt essai 1
Bonnet 2 1
pantalon bleu 1
gggggg 1
hhhhh 1
Pour le regroupement des produit c'est bon par contre il ne me fait pas la sommes des quantité . Il ne me donne a chaque fois la premiere quantité de mon tableau commande .
Et moi ce que je cherche a obtenir c'est la sommes des quantités par produit des commandes ou le champ dateattribution est NULL dans mes commandes.
ma table commande:
si quelqu'un peut m'aider, se serait un vrai soulagement.
Merci beaucoup
mon controller:
public function Acommande(ObjectManager $manager)
{
$repo = $this->getDoctrine()->getRepository(Commande::class);
$commande = $repo->findAll();
$commandes = $manager->createQuery('SELECT c, p, sum(c.qte) FROM \App\Entity\Commande c INNER JOIN \App\Entity\Produit p WHERE c.dateattribution IS NULL GROUP BY p.id ')->getScalarResult();
return $this->render('admin/commande/a-commandes.html.twig', [
'commande' => $commande,
'commandes' => $commandes
]);
}
mon twig:
{% for c in commandes %}
{{c.p_title}} {{c.c_qte}}</br>
{% endfor %}
le resultat:
Short rouge 1
Short vert 1
chaussure verte 1
t shirt essai 1
Bonnet 2 1
pantalon bleu 1
gggggg 1
hhhhh 1
Pour le regroupement des produit c'est bon par contre il ne me fait pas la sommes des quantité . Il ne me donne a chaque fois la premiere quantité de mon tableau commande .
Et moi ce que je cherche a obtenir c'est la sommes des quantités par produit des commandes ou le champ dateattribution est NULL dans mes commandes.
ma table commande:
si quelqu'un peut m'aider, se serait un vrai soulagement.
Merci beaucoup
europe21
Messages postés
63
Date d'inscription
mardi 26 décembre 2017
Statut
Membre
Dernière intervention
4 février 2024
Modifié le 24 août 2020 à 14:26
Modifié le 24 août 2020 à 14:26
ok désolé.
mon controller:
et mon twig:
l'erreur:
mon controller:
public function Acommande(ObjectManager $manager) { $repo = $this->getDoctrine()->getRepository(Commande::class); $commande = $repo->findAll(); $commandes = $manager->createQuery('SELECT adherentId,produitId, SUM(qte) as TOTAL_QTE FROM App\Entity\Commande GROUP BY adherentId, produitId')->getResult(); $out = array(); foreach($commandes as $C){ $out[$C['adherentId']][$C['produitId']] = $C['TOTAL_QTE']; } var_dump($out); return $this->render('admin/commande/a-commandes.html.twig', [ 'commande' => $commande, 'commandes' => $out ]); }
et mon twig:
{% for adherentId,c in commandes %} {{adherentId}} </br> {% for produitId,qte in c %} {{produitId}} {{qte}} </br> {% endfor %} {% endfor %}
l'erreur:
[Syntax Error] line 0, col 82: Error: Expected end of string, got 'BY'