IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer des données en bdd seulement si des champs sont identiques


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 126
    Points : 55
    Points
    55
    Par défaut Récupérer des données en bdd seulement si des champs sont identiques
    Bonsoir tout le monde,

    Je travaille sur un projet symfony.
    Dans ce cadre, je récupère mes données en bdd de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $repo = $this
                    ->getDoctrine()
                    ->getManager()
                    ->getRepository('Bundle:Nom')
                ;
                $list = $repo->findBy(array('client' => $clientID));
    Ça ça fonctionne, j'arrive à afficher mes données avec twig.
    Mais ensuite ça se complique, je dois maintenant faire une synthèse de ces données. J'ai plusieurs champs dans ma table dont nom, option, prix.
    En gros, je dois faire une boucle (ou même plusieurs je pense) pour regrouper les lignes dont le nom + l'option correspondent pour faire un total du prix.
    J'aurai ainsi plusieurs sous groupe (enregistrés dans un tableau ?) certains avec une seule ligne, d'autres avec plusieurs et je pourrais ainsi faire une synthèse.

    Je sais pas si c'est très clair, si vous voulez des détails n'hésitez pas.
    J'aimerais bien résoudre ça ce soir

    Merci d'avance pour votre temps !

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    C'est peut-être clair pour certains mais en tout cas, pas pour moi !

    1- Tu donnes un code qui est censé récupérer tes données ; c'est quoi que tu as dans $list ?

    2-
    regrouper les lignes dont le nom + l'option correspondent pour faire un total du prix.
    Bizarre, quand on lit ça, je comprend nom+option=prix. C'est sûrement pas ça. Peux-tu préciser ?

    3- C'est quoi les sous-groupes dont tu parles ? Et y aurait quoi dedans ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 126
    Points : 55
    Points
    55
    Par défaut
    Oui je me doutais que ce n'était pas clair ^^

    Je vais essayé d'expliquer, voici une table d'exemple :

    Nom : Sans titre 1.jpg
Affichages : 180
Taille : 63,6 Ko

    Les sous groupes sont regroupés par couleur. Sachant que je ne peux pas utiliser la colonne prix car j'ai aussi un champ quantité donc les prix varient, là c'est juste pour l'exemple.

    Dans $list, j'ai toute la table.

    Je voudrais, à partir de ce $list ou avec d'autres requêtes faire les totaux de prix.

    Exemple :
    les ids 1, 2, 4 et 11 sont égals à 20
    les ids 6, 8 et 9 sont égals à 21
    etc (beaucoup de données à traiter)

    Est ce que c'est plus clair ?

  4. #4
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 171
    Points
    17 171
    Par défaut
    Salut

    Fais une recherche dans ce forum avec le mot clef GROUP BY.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Oui, cette fois, c'est clair ; je sentais que la solution passait par une bonne requête SQL et je crois que ProgElecT donne la solution. Un truc du genre
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom,option,SUM(prix) from nom_de_ta_table GROUP BY prix
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 126
    Points : 55
    Points
    55
    Par défaut
    Re, après quelques recherches sur groupBy et le queryBuilder, je m'en suis sortie !
    Merci de m'avoir fait penser à groupBy !

    Si ça peut aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function group()
     
        {
            $qb = $this->createQueryBuilder('m');
     
            $qb ->select('m.nom as noms, m.option as options, SUM(m.objets) as objets , SUM(m.prix) as sommePrix')
                  ->groupBy('m.nom, m.options');
     
     
            return $qb->getQuery()->getResult();
        }

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Dans ta solution je découvre une colonne objets. Tu peux donner la structure de ta table pour mieux comprendre ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bonsoir Romenag.
    Pas mal du tout.
    Simplement je me demandais si ton DQL ne pouvait pas être légèrement amélioré :
    Peux-tu tester ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $qb ->select('m.nom as noms, m.option as options, COUNT(m.id) as objets_nb , SUM(m.prix) as objet_prix')
                  ->groupBy('m.nom, m.options');
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 126
    Points : 55
    Points
    55
    Par défaut
    Bonsoir tout le monde.

    Merci Dendrite pour ta requête, je me suis rendue compte que mes résultats étaient complétement faussés ! (Pas facile de se rendre compte avec un si grand nombre de données).
    Je procède par étapes, donc la suite c'est que je dois aussi filtrer par id_client et date, penses-tu que ceci est correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $qb ->select('m.nom as noms, m.options as options, COUNT(m.id) as objets_nb , SUM(m.sommePrix) as objet_prix')
                ->innerJoin('m.client', 'c', 'WITH', 'm.client = '.$id)
                ->where('m.date BETWEEN :start AND :end')
                ->setParameter('start', $start)
                ->setParameter('end',   $end)
                ->groupBy('m.nom, m.options');

    Et autre question, rien à voir avec le sujet mais c'est la suite de mon projet : ensuite je dois exporter mes données au format csv.
    J'ai un code qui a marché une fois, mais je ne sais pas à quoi j'ai touché mais maintenant il enregistre un script sorti de je ne sais où à la place de mes données.. bizarre..

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public function exportDetailsAction() {
     
            $fileName = "export_" . date('d-M-Y'). ".csv";
            $req = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('APPExportBundle:Export')
            ;
     
            $response = new StreamedResponse();
            $response->setCallback(function() use ($req) {
                $handle = fopen('php://output', 'w+');
     
                fputcsv($handle, ['champ 1', 'champ 2', 'champ 3', 'champ 4', 'champ 5', 'champ 6', 'champ 7', 'champ 8'], ';');
                $id = $this->getUser()->getClient()->getId();
                $start = new \DateTime($_POST['app_exportbundle_export']['start']);
                $end = new \DateTime($_POST['app_exportbundle_export']['end']);
                $lists = $req->findByParam($id, $start, $end);
                foreach ($lists as $list) {
                    fputcsv(
                        $handle,
                        [$list->getId(), $list->getNom(), $list->getNomProduit(), $list->getOptions(), $list->getMin(), $list->getMax(), $list->getObject(), $list->getPrice()],
                        ';'
                    );
                }
     
                fclose($handle);
            });
    Un idée de la cause ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2018, 08h38
  2. [XL-2010] Mise à jour des données d'une feuille à partir des données d'une ListView
    Par TSAFACK-M dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/04/2018, 02h58
  3. récupérer des données de BDD sur la page JSP/servlet
    Par B.M.W83 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 02/02/2017, 17h47
  4. [AC-2013] Répliquer des données - décalage dans la cadence des données
    Par kimai dans le forum Access
    Réponses: 5
    Dernier message: 30/10/2015, 17h46
  5. Enregistrer et récupérer des données (sans BDD)
    Par Prodiguy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/05/2013, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo