Requête PostgreSQL SELECT avec et sans ID

Résolu
Bonjour, je souhaite faire une fonction PHP qui permet de récupérer tout les enregistrements d'une table selon l'identifiant d'un Pays donné via un formulaire. Toutefois l'utilisateur peut choisir d'afficher les résultats pour tout les pays, il n'y aura donc pas d'ID transmis à la fonction mais juste une valeur "Tout".

Ma question est: comment faire une seule requête capable de sélectionner aussi bien un pays en particulier (lorsque l'ID est envoyé) que de sélectionner tout les pays lorsque "Tout" est envoyé ?

J'ai essayé avec LIKE et le joker % mais sans succès.

2 réponses

  1. Bonjour,

    Tu pourrais nous donner le code de ta fonction, pour qu'on voie directement comment on peut l'adapter ?

    Xavier
    1. Bonjour, merci pour votre aide .

      function database_select_country($country)
      {
      	//Connection à la base de données
              $bdd = database_connect();
      	
      	//Préparation de la requête
              $req = $bdd->prepare('SELECT  * FROM "public"."COUNTRY" WHERE "ID_COUNTRY" = '.$country.'');
              $req->execute(array()) or die(print_r($req->errorInfo()));	
      	
              return $req;
      }
      1. OK, donc le plus simple à mon avis serait de faire le test en php :
        function database_select_country($country)
        {
         //Connection à la base de données
                $bdd = database_connect();
        
                $texte_req = 'SELECT  * FROM "public"."COUNTRY"';
                if ($country != 'Tout')
                        $texte_req .= ' WHERE "ID_COUNTRY" = '.$country;
        
         //Préparation de la requête
                $req = $bdd->prepare($texte_req);
        
                $req->execute(array()) or die(print_r($req->errorInfo())); 
         
                return $req;
        }
      2. Merci beaucoup !

        Sinon il n'existe pas de solution "joker" comme avec LIKE et % _ pour les ID ?
      3. Non, je ne vois pas.
        Éventuellement un truc comme ça, mais ça reporte le test sur la base sql :
        $req = $bdd->prepare("SELECT  * FROM \"public\".\"COUNTRY\" WHERE \"ID_COUNTRY\" = '$country' OR '$country' = 'Tout'");
      4. Ok, encore une fois merci beaucoup !