$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)
    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)
    Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
    Mes logiciels OpenSource : https://www.avonture.be

    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
                              1 sur 2 < >

                              C'est [Réglé] et on n'en parle plus ?

                              A quoi ça sert ?
                              La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                              Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                              Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                              Comment ajouter la mention [Réglé] à votre discussion ?
                              1 - Aller sur votre discussion et éditer votre premier message :


                              2 - Cliquer sur la liste déroulante Préfixe.

                              3 - Choisir le préfixe [Réglé].


                              4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                              2 sur 2 < >

                              Assistance au forum - Outil de publication d'infos de votre site

                              Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                              Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                              Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                              UTILISER À VOS PROPRES RISQUES :
                              L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                              Problèmes connus :
                              FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                              Installation :

                              1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                              Archive zip : https://github.com/AFUJ/FPA/zipball/master

                              2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                              3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                              4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                              5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                              6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                              et remplacer www. votresite .com par votre nom de domaine


                              Exemples:
                              Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/
                              Pour executer le script: http://www..com/fpa-fr.php

                              Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/cms/
                              Pour executer le script: http://www..com/cms/fpa-fr.php

                              En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                              Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                              Voir plus
                              Voir moins

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X