Requête PostgreSQL SELECT avec et sans ID

Résolu/Fermé
ChiNoHikari Messages postés 6 Date d'inscription dimanche 12 avril 2009 Statut Membre Dernière intervention 11 mars 2014 - 11 mars 2014 à 10:33
ChiNoHikari Messages postés 6 Date d'inscription dimanche 12 avril 2009 Statut Membre Dernière intervention 11 mars 2014 - 11 mars 2014 à 14:24
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

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
11 mars 2014 à 11:31
Bonjour,

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

Xavier
0
ChiNoHikari Messages postés 6 Date d'inscription dimanche 12 avril 2009 Statut Membre Dernière intervention 11 mars 2014
11 mars 2014 à 12:39
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;
}
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié par Reivax962 le 11/03/2014 à 13:45
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;
}
0
ChiNoHikari Messages postés 6 Date d'inscription dimanche 12 avril 2009 Statut Membre Dernière intervention 11 mars 2014
11 mars 2014 à 14:02
Merci beaucoup !

Sinon il n'existe pas de solution "joker" comme avec LIKE et % _ pour les ID ?
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié par Reivax962 le 11/03/2014 à 14:20
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'");
0
ChiNoHikari Messages postés 6 Date d'inscription dimanche 12 avril 2009 Statut Membre Dernière intervention 11 mars 2014
11 mars 2014 à 14:24
Ok, encore une fois merci beaucoup !
0