$query->where Une ligne avec un OR et la suivante un And

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • $query->where Une ligne avec un OR et la suivante un And

    Bonjour à tous.

    Dans une query, j'utilise plusieurs $query->where.
    les deux premiers devant être un OR puis un AND et pour finir un OR.

    Le hic c'est qu'apparement je ne peux utiliser qu'un seul élément "colle/glue" dans ma query, soit des AND soit des OR mais pas les deux en même temps.

    C'est pour une grosse query de recherche, c'est donc plus facile d'utiliser des $query->where que de l'écrire à la main.

    Avez-vous déjà constater le problème ?

    Bonne fin de journée

    BErtrand
    Bertrand

    Chrystalide - Spécialiste Joomla

  • #2
    Re : $query->where Une ligne avec un OR et la suivante un And

    [Modo]Déplacement dans le forum Développement[/Modo]

    Bonjour

    C'est toi le patron, tu codes le query que tu veux.

    SELECT Champ1, Champ2
    FROM MaTable
    WHERE
    ( (Champ1=1) AND (Champ2=2) ) OR
    ( (Champ1=2) AND (Champ2=1) ) OR
    (Champ1=3)

    Si tu positionnes correctement tes parenthèses, je ne vois pas trop le soucis.

    Par contre, faut que cela reste logique. Si tu écris (Age=18) AND (Age=19); il faut que la personne ait 18 ans et 19 ans, impossible
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

    Commentaire


    • #3
      Re : $query->where Une ligne avec un OR et la suivante un And

      Bonjour Christophe,

      Oui c'est certain que si j'écris la query moi même je n'ai pas de soucis.
      Le hic c'est que ma query est déjà écrite avec des
      Code:
      $query->where ('t.task like '.$word, $glue);	
      						$query->where ('t.everyday like '.$word.'');	
      						$query->where ('t.goodtoknow like '.$word);
      						$glue = 'AND';	
      						$query->where ('c.company_name like '.$word);
      Le nombre de where étant variable selon les options choisies par l'utilisateur.
      Rédiger dans une variable l'ensemble de ma query est plus laborieux.

      d'où ma question, est-il possible d'utiliser des $query->where avec un OR puis un AND

      Bertrand
      Bertrand

      Chrystalide - Spécialiste Joomla

      Commentaire


      • #4
        Re : $query->where Une ligne avec un OR et la suivante un And

        salut
        à mon avis c'est un problème de parenthèses qui permettent de créer les groupes de condition, mais avec le query->where je ne sais pas car je ne l'ai pas encore utilisé
        Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
        http://www.template-creator.com Outil de création de templates
        Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

        Commentaire


        • #5
          Re : $query->where Une ligne avec un OR et la suivante un And

          Envoyé par chrystalide Voir le message
          d'où ma question, est-il possible d'utiliser des $query->where avec un OR puis un AND
          Non, ce n'est pas pas possible.

          Seul le premier appel de la méthode where() de la classe JDatabaseQuery définie la variable 'glue'.

          Pour utiliser cette méthode il faut d'abord déterminer si la condition complexe de la clause where est de type AND :
          WHERE cond1 AND cond2 AND ... AND condN
          $glue = 'AND';

          ou de type OR :
          WHERE cond1 OR cond2 OR ... OR condN
          $glue = 'OR';

          Ensuite, il suffit d'écrire :
          $query-->where('cond1', $glue);
          $query-->where('cond2');
          ...
          $query-->where('condN');

          Si une (ou plusieurs) des sous-conditions est elle-même complexe, il faut la passer en dur en argument de la méthode where().

          Par exemple :
          $query-->where('( (Champ1=1) AND (Champ2=2) )');
          ou
          $query-->where('( (Champ1=1) OR (Champ2=2) )');

          En fait la méthode where() n'est pas récursive...
          Fly06_Fr (http://www.fly06.fr/)
          -------------------------------------------
          Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

          Commentaire


          • #6
            Re : $query->where Une ligne avec un OR et la suivante un And

            Envoyé par Fly06_Fr Voir le message
            ..
            Par exemple :
            $query-->where('( (Champ1=1) AND (Champ2=2) )');
            ou
            $query-->where('( (Champ1=1) OR (Champ2=2) )');

            En fait la méthode where() n'est pas récursive...
            c'est pas toujours possible si on doit faire une requête d'une 50 de lignes avec des switch, des where et des order by ... bref, j'avais du abandonné et mis tout ca en dur .

            je pense que les concepteurs de joomla doivent corrigé ce défaut , utiliser la méthode $query->where() aurai faciliter grandement l’écriture de mon moteur de recherche .
            DesignBoh ( designboh.com ) agence de communication en Tunisie. Experts Joomla et Wordpress.

            Mon blog : http://bouziri-tarak.blogspot.com/

            Commentaire


            • #7
              Re : $query->where Une ligne avec un OR et la suivante un And

              A moins qu'il ne s'agisse d'un défaut de conception de la query à exécuter ?

              Il ne faut pas toujours mettre l'impossibilité d'utiliser un concept sur les concepteurs de l'un ou l'autre outil, mais parfois sur les conceptions des utilisateurs.

              Il existe peut-être d'autres outils disponibles au niveau du moteur BDD qui permettraient de résoudre ton problème de manière plus "élégante" (je pense aux procédures stockées, mais en ne sachant pas s'il est possible d'exploiter ce type de concept via joomla).

              Ou alors, passe par un "constructeur de query" que tu adapterais à tes besoins. Si tu construis un moteur de recherche, tu aurais peut-être intérêt à surcharger la méthode "where" pour qu'elle corresponde mieux à tes besoins ? Et ainsi, tu pourrais faire profiter la communauté de tes capacités à identifier et résoudre un problème que les développeurs de Joomla! n'ont pas vu/traité/corrigé.

              Bien à toi
              JoomApero Belgique : Venez choisir vos dates de participation : http://www.doodle.com/zygn3m6ki9hsede5
              Quand j'entends ce que j'entends, et que je vois ce que je vois, je suis bien content de penser ce que je pense...
              Pourquoi mettre [REGLE] dans son titre ? C'est simple : lisez !!

              Commentaire


              • #8
                Re : $query->where Une ligne avec un OR et la suivante un And

                en faite , si ces lignes marchaient correctement , ca serait résolu et beaucoup plus simple :

                $query-->where('cond1', 'AND');
                $query-->where('cond2','OR');
                $query-->where('cond3', 'AND'); etc ...


                pour les procédures stockés , je vois pas de méthodes pour les appeler dans joomla , donc faudrait passer par du simple php .


                merci en tout cas pour le conseil

                tarak .
                DesignBoh ( designboh.com ) agence de communication en Tunisie. Experts Joomla et Wordpress.

                Mon blog : http://bouziri-tarak.blogspot.com/

                Commentaire


                • #9
                  Re : $query->where Une ligne avec un OR et la suivante un And

                  Bonjour à tous,

                  Merci pour vos différentes réponses.
                  Je pense que le query->where montre très vite ses limites.

                  Effectivement avoir la possibilité de définir le and et or dans chaque $query->where serait un plus.
                  Mais après nous aurons le problèmes des parenthèse "d'importance".
                  ($where and $where )OR ($where or $where) and $where
                  Il faudrait dès lors pouvoir associer les $query->where à des groupes ... ?

                  Je vais manuellement écrire le $query->where()

                  Merci et bonne journée
                  Bertrand
                  Bertrand

                  Chrystalide - Spécialiste Joomla

                  Commentaire


                  • #10
                    Re : $query->where Une ligne avec un OR et la suivante un And

                    Envoyé par chrystalide Voir le message
                    Je pense que le query->where montre très vite ses limites.
                    Tu as un exemple où l'utilisation de cette méthode pose problème ?

                    Merci.
                    Fly06_Fr (http://www.fly06.fr/)
                    -------------------------------------------
                    Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                    Commentaire


                    • #11
                      Re : $query->where Une ligne avec un OR et la suivante un And

                      bonjour Fly06_fr

                      Et bien l'exemple de tarak
                      Code:
                      $query-->where('cond1', 'AND');
                      $query-->where('cond2','OR');
                      $query-->where('cond3', 'AND');
                      est impossible à réaliser de cette façon..
                      Bertrand

                      Chrystalide - Spécialiste Joomla

                      Commentaire


                      • #12
                        Re : $query->where Une ligne avec un OR et la suivante un And

                        Bonjour chrystalide,
                        Envoyé par chrystalide Voir le message
                        bonjour Fly06_fr

                        Et bien l'exemple de tarak
                        Code:
                        $query-->where('cond1', 'AND');
                        $query-->where('cond2','OR');
                        $query-->where('cond3', 'AND');
                        est impossible à réaliser de cette façon..
                        C'est exact mais ce n'est pas lié à une limitation de la méthode where() mais au fait que l'expression :

                        "cond1 AND cond2 OR cond3 AND"

                        est incorrecte sur le plan de la syntaxe.

                        Les opérateurs AND et OR étant des opérateurs binaires, il manque donc une opérande à droite du dernier AND.
                        Dernière édition par Fly06_Fr à 07/11/2011, 19h44
                        Fly06_Fr (http://www.fly06.fr/)
                        -------------------------------------------
                        Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                        Commentaire


                        • #13
                          Re : $query->where Une ligne avec un OR et la suivante un And

                          C'est balo de prétendre que la méthode where() est limitative et d'être dans l'incapacité d'exhiber le moindre exemple concret.

                          J'attendais mieux que ça d'un spécialiste Joomla.

                          Fly06_Fr (http://www.fly06.fr/)
                          -------------------------------------------
                          Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                          Commentaire


                          • #14
                            Re : $query->where Une ligne avec un OR et la suivante un And

                            Bonjour Fly06_fr

                            Le cas concret c'est
                            Code:
                            $query-->where('cond1', 'AND');
                            $query-->where('cond2','OR');$query-->where('cond2');
                            Ce n'est pas possible. Il faut le marquer manuellement.

                            Bonne journée
                            Bertrand
                            Bertrand

                            Chrystalide - Spécialiste Joomla

                            Commentaire


                            • #15
                              Re : $query->where Une ligne avec un OR et la suivante un And

                              Bonjour Chrystalide,
                              Envoyé par chrystalide Voir le message
                              Le cas concret c'est
                              Code:
                              $query-->where('cond1', 'AND');
                              $query-->where('cond2','OR');$query-->where('cond2');
                              Ce n'est pas possible. Il faut le marquer manuellement.
                              En fait tu inverses le problème.

                              Peux-tu nous donner la clause WHERE dans sa forme normale (SQL) que l'on comprenne pourquoi il n'est pas possible de l'écrire via la méthode where() de l'API Joomla.

                              Merci.
                              Fly06_Fr (http://www.fly06.fr/)
                              -------------------------------------------
                              Classe MooTools pour Recherche Asynchrone (Ajax) : http://forum.joomla.fr/showthread.ph...one-%28Ajax%29

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X