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

PHP & Base de données Discussion :

select distinct qui ne marche pas [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 171
    Par défaut select distinct qui ne marche pas
    Bonjour
    J'ai un menu déroulant que je voudrais dynamique.
    Mais mon champ ne s'alimente pas et je ne vois pas mon erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $req = "select distinct le TrackName from hotlaps order by TrackName ASC";
    $res = mysql_query($req):
    echo "Circuits <select name='Track'>";
    while($TrackName = mysql_fetch_row($res)){
           $TrackName = $TrackName[1];
          echo "<option value='$TrackName'>$TrackName</option>
         }
    echo "</select>";
    Le champ reste désespérement vide.
    Par contre si j'enleve DISTINCT alors là cela fonctionne... ?????
    Mais il y aura des doublon alors que c'est ce que je ne veut pas
    Si vous voyez une erreur ...

    Merci bien

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Qu'est ce que c'est 'le Trackname' ??

    Si c'est le nom d'un attribut, il suffit d'utiliser des parenthèses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT(`TrackName`)  FROM `hotlaps` ORDER BY `TrackName` ASC

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    le faite d'écrire le TrackName sa bug dans la requête , alors je me demande comment sa fonctionne sans distinct !!!!
    je crois qu'il faut écrire a la base le_trackname.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 171
    Par défaut
    Salut et merci de vous penchez sur mon problème
    En ce qui concerne "le TrackName" j'ai fait une erreur ...c'est "TrackName" sans rien avant .
    C'est le nom de la colonne dans ma table

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Alors la requête que je t'ai donné devrait corriger ton problème.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Les parenthèses sont inutiles avec DISTINCT.
    Et, dans le cas présent, ces saloperies d'apostrophes inversées sont inutiles également.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct TrackName 
    from hotlaps 
    order by TrackName ASC
    Cette requête donne la liste des Tracname de la table hotlaps sans doublon.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    ces saloperies d'apostrophes inversées sont inutiles
    Personnellement, je mets systématiquement des backquotes, ça m'évite de devoir me creuser la soupière pour savoir si la référence que j'utilise est un mot clé ou non.

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Personnellement, je mets systématiquement des backquotes, ça m'évite de devoir me creuser la soupière pour savoir si la référence que j'utilise est un mot clé ou non.
    Ben en adoptant un standard de nommage qui évite absolument les mots clés SQL, on n'a jamais besoin de se tordre les doigts sur le clavier pour taper ces parasites !

    Personnellement, je me suis inspiré de celui de SQLPro et je préfixe systématiquement les noms de mes colonnes par un acronyme rappelant de quelle table provient la colonne :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT htl_track_name 
    FROM hotlaps_htl 
    ORDER BY htl_track_name ASC
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 171
    Par défaut
    Re bonjour
    Bon alors vous êtes ai même niveau que moi LOL
    J'ai exactement cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT TrackName
    FROM hotlaps
    ORDER BY TrackName ASC
    Et bien cela ne fontionne pas
    Et si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM hotlaps
    ORDER BY TrackName ASC
    Cela affiche bien Les données mais en doublons.
    Et ici l'originale donc un copier/coller de mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $requ = "SELECT DISTINCT TrackName FROM hotlaps ORDER BY TrackName ASC";
    $resu = mysql_query($requ);
    echo "Circuits <select name='track'>";
    while($TrackName = mysql_fetch_row($resu)){
          $TrackName = $TrackName[1];
          echo "<option value='$TrackName'>$TrackName</option>";
          }
          echo "</select>";
    Je ne vois vraiment pas ou est le truc qui ne fonctionne pas.

    Merci pour votre aide

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Le problème n'est pas dans le SQL mais dans le PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while($TrackName = mysql_fetch_row($resu)){
          $TrackName = $TrackName[1];
    Vous avez le même nom de variable pour le tableau et pour la valeur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while($row = mysql_fetch_row($resu)){
          $TrackName = $row[1];
    De plus, d'après la doc de PHP :
    mysql_fetch_row() va rechercher une ligne dans le résultat associé à l'identifiant de résultat spécifié. La ligne est retournée sous la forme d'un tableau. Chaque colonne est enregistrée sous la forme d'un tableau commençant à la position 0.
    Comme votre requête ne retourne qu'une colonne de résultat, son indice est 0 et non pas 1 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while($row = mysql_fetch_row($resu)){
          $TrackName = $row[0];
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 171
    Par défaut
    Je viens de change ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while($TrackName = mysql_fetch_row($req)){
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while($TrackName = mysql_fetch_assoc($req)){
    ensuite enleve le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $TrackName = $TrackName[1];
    Et le final complet donne cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    req = "select distinct TrackName from hotlaps order by TrackName";
    $res = mysql_query($req);
    echo "Choisissez un circuit <selet name='track'>";
     while($TrackName = mysql_fetch_assoc($res)){
     echo "<option value='".$TrackName['TrackName']."'>".$TrackName['TrackName']."</option>
    }
    echo "</select>";
    Mais que j'ai la même chose sans le DISTINCT ca affiche sauf qu'avec le DISTINCT non, alors est-ce que cela joue réellement ?
    Bref là, cela fonctionne ...

    Merci de votre patience

    @+

  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Exécutez la requête avec DISTINCT dans phpMyAdmin et vous verrez si elle renvoie des résultats. Je ne vois pas pourquoi elle n'en renverrait pas si sans le DISTINCT il y en a.

    Ceci étant vérifié. Si vous n'avez rien dans votre liste en PHP, c'est que c'est le code PHP qui ne va pas.

    Dans votre dernier code, vous avez écrit la balise <selet> au lieu de <select> !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 171
    Par défaut
    LOL oui c'est une erreur de ma part ici pour le select
    Quand a l'astuce de tester dans phpmyadmin c'est enregistré si ca foctionne c'est que le code php à une erreur, je retiens la leçon.
    Merci bien professeur c'est très instructif ici et j'aime cela
    Merci encore

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

Discussions similaires

  1. [MySQL] INSERT aprés un SELECT qui ne marche pas
    Par mrsoyer dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/10/2011, 15h45
  2. readonly dans un select qui ne marche pas sous IE
    Par jules_diedhiou dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/03/2009, 13h17
  3. select distinct qui ne marche pas
    Par Baldric de Dol dans le forum Requêtes
    Réponses: 6
    Dernier message: 05/05/2008, 17h16
  4. Select Case qui ne marche pas
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2007, 13h45
  5. Socket, recv et select qui ne marche pas
    Par Zapan dans le forum Réseau
    Réponses: 18
    Dernier message: 30/06/2006, 20h19

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