Page 1 sur 1

Affiché une entrée selon une condition

Posté : 13 avr. 2017, 17:16
par yoann38
Salut tout le monde.
Voilà j'ai en bdd plusieurs entrées et j'aimerais les affiché selon un cas bien précis.
Je souhaite affiché mes entrées sous la forme :

Alsace

67 - Bas-Rhin
68 - Haut-Rhin

Aquitaine

24 - Dordogne
33 - Gironde
40 - Landes
47 - Lot-et-Garonne
64 - Pyrénées-Atlantiques

Mais voilà si par exemple il n y a pas d'entrée pour le departement 68 alors on ne l'affiche pas.

J'ai donc fait ceci:
En gros je sélectione les département qui ont plus d'une entrée.
J'ai 2 problème, le premier c'est que le DISTINCT ne marche pas car plusieurs fois le même et que je souhaite affiché le nom de la région d'abord et ensuite les département selon la région
// Selection des sorties par département	
    $loisir_localisation = "SELECT DISTINCT id_departements,id_region, count(id_loisirs) as nb_annonces FROM `loisirs` WHERE genre_loisir = '".$_GET['loisir']."'";
	$loisir_localisation .= " GROUP BY city HAVING nb_annonces >1 ORDER BY id_region ASC LIMIT 20,10";
	$req = $bdd->query($loisir_localisation);

    while($ligne = $req->fetch(PDO::FETCH_ASSOC)){                                 
    echo '<li>'.$depts[$ligne['id_departements']].'</li>';    	
    }
Merci à vous pour le coup de pouce ;)

Re: Affiché une entrée selon une condition

Posté : 14 avr. 2017, 08:39
par moogli
salut,

Le truc c'est que ton département à une région et que la région à plusieurs département, donc ils vont forcément tous t'indiquer leur région.
je suppose que tu as une jointure sur une table département et une sur une table région ? (genre pour avoir les libellés ?

si ta requête retourne les données que tu souhaites c'est un bon début, le reste c'est de l'affichage.
C'est normale que tu imposes de prendre 10 enregistrements à partir du 20ème ? il ne manquerait des marqueurs pour une pagination ?
il ne manquerait pas un group by dans ta requête sql ? (genre pour avoir le nombre de loisir par département ?).

pour l'affichage il faut ajouter un peu d'intelligence au contenu de ton while.

La plus simple c'est d'avoir une variable, en dehors du while, qui va contenir le nom de la région précédente (disons $oldRegion ;) ).
dans le while tu vérifies si la région courante (dans $ligne['id_region']) est différent de $oldRegion. si c'est le cas tu affiches la région, et $oldRegion prend la valeur courante de $ligne['id_region'].

c'est pas plus compliqué que cela. pour obtenir le résultat que indique tu va devoir jouer un peu avec les balise html mais rien de complexe (dl, dt, dd etc. https://www.w3.org/TR/html401/struct/lists.html).


@+