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 SQL Discussion :

Problème createNativeQuery et condition avec OR


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème createNativeQuery et condition avec OR
    Bonjour,

    J'ai une liste déroulante (service) qui se met à jour par ajax quand est effectué un choix dans une autre liste (catégorie).

    Mon problème est que lorsque je choisis 2 choix dans la liste catégorie, il ne prend que le dernier choix et non pas les deux.

    là où je coince, c'est aplliquer une condition dans le createnativequery :
    LEFT JOIN document d ON (d.category_id=:categorie_1 OR d.category_id=:categorie_2)

    Voilà ci-dessous la requête que je souhaite appliquer à createNativeQuery

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  s.id, s.name, COUNT(s.id) as nb_service2
            FROM service s
            INNER JOIN service_document sd 
            ON s.id = sd.service_id
            LEFT JOIN document d ON (d.category_id=:categorie_1 OR d.category_id=:categorie_2)
            WHERE d.category_id IS NOT NULL AND sd.document_id=d.id AND d.enabled = 1 GROUP BY s.id order by name
    Et voiçi ci-dessous le code que j'utilise pour générer la liste des services selon le choix des catégories :

    Code php : 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
    public function listeDocumentServiceCategorieNotEmpty($class, $categorie)
    { 
     
        foreach($categorie as $categories) {
        $em = $this->getEntityManager();
        $rsm = new ResultSetMappingBuilder($em);
          $rsm->addRootEntityFromClassMetadata(Service::class, 's');
        $join_table = $em->getClassMetadata($class)->getAssociationMapping('services');
     
         $mySql = "
            SELECT  s.id, s.name, COUNT(s.id) as nb_service2
            FROM service s
            INNER JOIN service_document sd 
            ON s.id = sd.service_id
            LEFT JOIN document d ON d.category_id=:categorie
            WHERE d.category_id IS NOT NULL AND sd.document_id=d.id AND d.enabled = 1 GROUP BY s.id order by name";
     
         $query = $em->createNativeQuery($mySql, $rsm);
         $query->setParameter('categorie', $categories);
        return $query->getArrayResult();
        }
    }

    En espérant que quelqu'un puisse m'éclairer...

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Avoir mis deux restrictions sur des colonnes de la table OUTER (d) transforment implicitement la jointure en INNER.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE d.category_id IS NOT NULL 
      AND sd.document_id=d.id 
      AND d.enabled = 1

  3. #3
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse. Effectivement " WHERE d.category_id IS NOT NULL " est inutile.
    En le supprimant, quand je choisis 2 catégories, n'est prise en compte que le premier choix au lieu du dernier auparavant... Mais toujours pas les deux

  4. #4
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai enfin trouvé !
    Code php : 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
    public function listeDocumentServiceCategorieNotEmpty($class, $categorie)
    { 
     
     
        $em = $this->getEntityManager();
        $rsm = new ResultSetMappingBuilder($em);
          $rsm->addRootEntityFromClassMetadata(Service::class, 's');
        $join_table = $em->getClassMetadata($class)->getAssociationMapping('services');
     
         $mySql = "
         SELECT s.id, s.name, COUNT(s.id) as nb_service2 
         FROM service s
         INNER JOIN service_document sd ON s.id = sd.service_id 
         LEFT JOIN document d ON d.category_id WHERE d.category_id IN(:categorie) AND sd.document_id=d.id AND d.enabled = 1 GROUP BY s.id order by name";
     
         $query = $em->createNativeQuery($mySql, $rsm);
         $query->setParameter('categorie', array_values($categorie));
        return $query->getArrayResult();
     
    }

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Le prédicat de jointure de la table outer est incomplet, je suis surpris qu'il n'y ait aucun message d'erreur

    LEFT JOIN document d ON d.category_id WHERE d.category_id IN(:categorie) AND...

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

Discussions similaires

  1. Problème recherchev à 2 condition avec index matriciel
    Par Kestion100 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/09/2014, 12h02
  2. [XL-2007] problème de condition avec couleur de cellule
    Par dmoluc dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 30/07/2012, 17h39
  3. [SQL] Problème de requête SQL sur une condition avec OR
    Par vinzginz dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/10/2007, 15h31
  4. Problème de condition avec If
    Par noursowner dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/06/2007, 08h33
  5. Réponses: 4
    Dernier message: 13/02/2006, 11h13

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