IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

Distinct sélection sur code postal


Sujet :

MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Par défaut Distinct sélection sur code postal
    Bonjour à tous,
    Cela fait des heures que j'essaye de gérer un problème, je n'y arrive pas.
    Table : petites annonces avec plusieurs fois le même code postal, c'est possible
    Le but de mon script : extraire les codes postaux sur seulement les deux premiers chiffres en évitant les doublons de la base.
    C'est à dire que l'internaute doit pouvoir obtenir uniquement les départements contenant une annonce ou plus

    Ce qui est bizarre c'est que la requete suivante fonctionne dans phpmyadmin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT (LEFT(codep,2)) FROM annonce ORDER BY codep ASC;
    Et quand je l'utilise dans ma page du site cela ne fonctionne plus !!! :-(

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requetedep = mysqli_query($mysqli, "SELECT DISTINCT (LEFT(codep,2)) FROM annonce ORDER BY codep ASC");
                                                    while ($departements = mysqli_fetch_array($requetedep)) {
                                                        $dept = substr($departements['codep'],0,2);  // doublon de la requete distinct... mais qui me permettait de n'avoir que les 2 premiers chiffres de département
                                                        $departement = array('01'=>'Ain','02'=>'Aisne');   // mise en relation numéro du département avec son nom
     
                                                        echo "<option value='$dept'>$dept - $departement[$dept]</option>";
                                                        }
                                                       mysqli_free_result($requetedep);

    MERCIIIIIIIIIIII 1000 fois par avance

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Salut ! Tu peux utiliser les balises # pour mettre en forme ton code.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $requetedep = mysqli_query($mysqli, "SELECT DISTINCT LEFT(codep,2) FROM annonce ORDER BY codep ASC");
    while ($departements = mysqli_fetch_array($requetedep)) {
        $dept = substr($departements['codep'],0,2); // doublon de la requete distinct... mais qui me permettait de n'avoir que les 2 premiers chiffres de département
        $departement = array('01'=>'Ain','02'=>'Aisne'); // mise en relation numéro du département avec son nom
        echo "<option value='$dept'>$dept - $departement[$dept]</option>";
    }

    Les () sont inutiles après le DISTINCT.

    Le script est incohérent car tu accèdes à $departements['codep'] mais je ne vois pas la sélection de cette colonne.

    Essaie :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $departements_liste = ['01' => 'Ain', '02' => 'Aisne', ...]; // À compléter et à mettre dans une table
     
    $result = mysqli_query($mysqli, 'SELECT DISTINCT LEFT(codep, 2) AS departement FROM annonce ORDER BY departement ASC');
    while ($record = mysqli_fetch_array($result)) {
        echo "<option value='{$record['departement']}'>{$record['departement']} - {$departements_liste[$record['departement']]}</option>";
    }

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Par défaut MERCI Seb.
    Merci beaucoup Séb., grâce à ta correction j'ai enfin ce que je souhaitais :-)

    Voici ce qui fonctionne (si cela peut servir à d'autres...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $result = mysqli_query($mysqli, 'SELECT DISTINCT LEFT(codep, 2) AS departement FROM annonce ORDER BY departement ASC');
    	while ($record = mysqli_fetch_array($result)) {
    	$departements = array('01'=>'Ain','02'=>'Aisne','03'=>'Allier'...);
    echo "<option value='{$record['departement']}'>{$record['departement']} - {$departements[$record['departement']]}</option>";

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 591
    Billets dans le blog
    10
    Par défaut
    bonjour

    Citation Envoyé par slide94 Voir le message
    Table : petites annonces avec plusieurs fois le même code postal, c'est possible
    Le but de mon script : extraire les codes postaux sur seulement les deux premiers chiffres en évitant les doublons de la base.
    La réponse technique a été donnée, mais...
    ... un code postal n'implique pas un département, il existe des codes postaux hors département, c'est un piège classique dans lequel de nombreux développeurs tombent régulièrement.

    Voir ICI

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 824
    Par défaut
    Salut à tous.

    Citation Envoyé par slide94
    Cela fait des heures que j'essaye de gérer un problème, je n'y arrive pas.
    Parce que vous problème est mal posé !

    En tenant compte des bons conseilles d'Escartefigue, je vous suggère de créer une colonne supplémentaire de nom "dept" sur deux chiffres, contenant le numéro du département où se situe le lieu géographique et non celui du code postal.

    D'une part, cela va résoudre le problème où le département du code postal ne coincide pas avec celui du lieu géographique, et d'autre part, vous aurez une bien meilleure performance dans l'obtention du résultat.

    @+

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 995
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    bonjour

    La réponse technique a été donnée, mais...
    ... un code postal n'implique pas un département, il existe des codes postaux hors département, c'est un piège classique dans lequel de nombreux développeurs tombent régulièrement.

    Voir ICI
    Il y a aussi les DOM TOM dont le "numéro de département" est sur 3 chiffres...
    • 971 : Guadeloupe
    • 972 : Martinique
    • 973 : Guyane
    • 974 : La Réunion
    • 976 : Mayotte


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 952
    Par défaut
    re,

    Les limites administratives ou l'organisation des tournées ne répondent pas au besoin.
    C'est pour ce genre de cas que les types "spacial" ont été créé
    En général on défini un point de référence et un rayon pour filtrer les lignes qui sont dans le cercle.

    https://dev.mysql.com/doc/refman/8.4...ial-types.html

    Et si je veux être tatillon, le plus "mieux" est d'avoir la liste des lignes qui sont à x minutes de transport en pouvant choisir le moyen de transport.
    Mais là il faut une API pour aller questionner l'état de la circulation.

    Au final un cercle c'est facilement représentable sur une carte
    Le savoir est une nourriture qui exige des efforts.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Regrouper code postal par groupe de 6 presque identiques sur AC-2003
    Par jbpatron dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 23/11/2016, 14h01
  2. requete sql sur code postal
    Par dedel53 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/02/2010, 10h19
  3. SQL LIKE et Expression régulière sur Code postal
    Par framus.class dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/12/2009, 12h31
  4. requete sur un champ code postal
    Par alexkickstand dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/03/2009, 14h01
  5. Afficher les coordonnées d'un code postal sur une carte
    Par FredericB dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/12/2007, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo