Afficher une seule occurrence des lignes qui ont les mêmes valeurs
europe21
Messages postés
62
Date d'inscription
Statut
Membre
Dernière intervention
-
europe21 Messages postés 62 Date d'inscription Statut Membre Dernière intervention -
europe21 Messages postés 62 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis sous symfony 4.
Je cherche a n'afficher qu'une seule occurence des lignes qui ont les mêmes valeurs dans ma base de donnée.
Je veux afficher les commandes en cours de mes clients. mais si un client a plusieurs commandes je ne veux pas que sont nom soit affiché 3 ou 4 fois.
J'ai pensé au GOUP BY mais je ne suis pas sur.
J'ai essayé en DQL comme cela:
Mon twig:
Je n'ai pas d'erreur mais rien ne s'affiche.
J'ai fait une erreur?
Ou alors est il possible de faire cela directement dans mon fichier twig?
Merci de votre aide.
Je suis sous symfony 4.
Je cherche a n'afficher qu'une seule occurence des lignes qui ont les mêmes valeurs dans ma base de donnée.
Je veux afficher les commandes en cours de mes clients. mais si un client a plusieurs commandes je ne veux pas que sont nom soit affiché 3 ou 4 fois.
J'ai pensé au GOUP BY mais je ne suis pas sur.
J'ai essayé en DQL comme cela:
public function Acommande(ObjectManager $manager)
{
$repo = $this->getDoctrine()->getRepository(Commande::class);
$commande = $repo->findAll();
$commandes= $manager->createQuery('SELECT adherentId,produitId,qte FROM App\Entity\Commande GROUP BY adherentId');
return $this->render('admin/commande/a-commandes.html.twig', [
'commande' => $commande,
'commandes' => $commandes
]);
}
Mon twig:
{% for c in commandes %}
{{c.adherentId}} </br>
{{c.produitId}} </br>
{{c.qte}}
{% endfor %}
Je n'ai pas d'erreur mais rien ne s'affiche.
J'ai fait une erreur?
Ou alors est il possible de faire cela directement dans mon fichier twig?
Merci de votre aide.
Configuration: Windows / Chrome 84.0.4147.125
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
- Partager des photos en ligne - Guide
- Afficher toutes les lignes masquées excel ✓ - Forum Excel
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. - Forum VB / VBA
- Mise en forme conditionnelle "compris entre" ✓ - Forum Excel
8 réponses
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.
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
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é).
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
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) { }
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
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) { }
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
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'