Tri du résultat de 2 boucles imbriquées par ordre alphabetique

DoubleClic
Invité n'ayant pas de compte PHPfrance

17 nov. 2007, 01:08

Bonsoir à tous,

Voilà mon problème :

J'ai une table avec les régions de France, une autre avec les départements et une dernière avec des sociétés

La table régions est composée de 3 colonnes : id , nom , numero_region
La table départements est composée de 4 colonnes : id , nom , numero_departement , numero_region
La table sociétés a 5 colonnes : id , nom , adresse , code_postal , ville

Ma problématique est la suivante : je cherche à lister toutes les villes d'une région en les classant par ordre alphabetique et sans doublons.

Pour cela je connait uniquement le numéro de région.
Avec ce numéro je peux rechercher les départements et en utilisant le code_postal des sociétés enregistrées je peux afficher les villes mais ma requète est impossible à classer par ordre alphabétique.

Code : Tout sélectionner

$r_dep=mysql_db_query($db," SELECT numero_departement FROM table_departements WHERE numero_region='1' "); while($dep=mysql_fetch_assoc($r_dep)) { $r_ville=mysql_db_query($db," SELECT ville FROM table_societes WHERE code_postal LIKE '$dep[numero_departement]%' AND actif='1' GROUP BY ville ORDER BY ville ASC"); while($req=mysql_fetch_assoc($r_ville)) { echo ''.$req['ville'].'<br />'; } }
Et là j'ai bien la liste de toute les villes des sociétés qui sont bien dans la région concernée mais dans l'ordre alphabétique de chaque département et non pour toute la région.

J'espère avoir été assez clair dans mon explication ;-)

Par avance merci pour votre aide.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2007, 02:25

Nous donner la structure des tables c'est bien mais sous forme d'instruction SQL (CREATE TABLE ...) c'est bien mieux pour qu'on puisse faire des tests.
Pour obtenir cette instruction tu peux te servir de la fonction "exporter" de phpMyAdmin.

En attendant peut etre une piste avec (jamais utilisé de fonction pour la jointure... peut etre pas optimisé :-k voire pas du tout correct :P ) :

Code : Tout sélectionner

SELECT ts.ville FROM table_departements td JOIN table_societes ts ON td.numero_departement = SUBSTR(ts.code_postal,1,2) WHERE td.numero_region='1' AND ts.actif='1' GROUP BY ts.ville

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

DoubleClic
Invité n'ayant pas de compte PHPfrance

17 nov. 2007, 14:40

Oups !!!

Voilà les tables ci-dessous.
J'ai fais le test et cela fonctionne à merveille.

Maintenant faut que je comprenne le code pour pouvoir le réutiliser si besoin.

Un grand merci pour cette réponse super rapide et efficace.

Code : Tout sélectionner

CREATE TABLE `regions` ( `id_region` int(11) NOT NULL auto_increment, `numero_region` char(2) NOT NULL default '', `nom_region` varchar(50) NOT NULL default '', PRIMARY KEY (`id_reg`) ) CREATE TABLE `departements` ( `id_departement` int(2) NOT NULL auto_increment, `numero_departement` char(3) NOT NULL default '', `nom_departement` varchar(50) NOT NULL default '', `numero_region` char(2) NOT NULL default '', PRIMARY KEY (`id_dep`) ) CREATE TABLE `societes` ( `id_societe` int(11) NOT NULL auto_increment, `nom_societe` varchar(50) NOT NULL default '', `adresse_societe` varchar(50) NOT NULL default '', `code_postal_societe` varchar(5) NOT NULL default '', `ville_societe` varchar(50) NOT NULL default '', PRIMARY KEY (`id_hotel`) )

Eléphant du PHP | 185 Messages

17 nov. 2007, 15:01

Pour éviter les doublons tu peux utiliser la clause DISTINCT dans ta requête :
$requete = "SELECT DISTINCT ville FROM ma_table WHERE..."

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 nov. 2007, 16:08

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute