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 :

Manque un enregistrement avec Order by [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut Manque un enregistrement avec Order by
    Lorsque que j'utilise order by dans mon select, il me manque le premier enregistrement. En retirant order by, j'ai bien tous les enregistrements.
    Voici le code de ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    function listeVilleCp($cp){
    // Déclaration des paramètres de connexion
    // $host = la_machine;
    $host = "localhost";
    // $user = votre_login;
    $user = "root";
    // $bdd = Nom_de_la_base_de_donnees;
    $bdd = "ljdl";
    // $passwd  = Mot_de_passe;
    $passwd  = "mysql";
    // $cp="code_postal";
    //$cp='14690';
    $html = <<<EOT
    	<div id="selectVille">
    		<select name="selectVille" class="form">
    			<option value="" selected="selected">Sélectionnez une commune</option>
    EOT;
    
    // Connexion au serveur
    mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
    
    mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
    
    // Creation et envoi de la requete
    $query = "SELECT nom FROM villes WHERE code_postal=$cp ORDER BY nom ";
    
    $result = mysql_query($query);
    
    // Recuperation des resultats
    if (!mysql_fetch_row($result)) {
    	echo "Aucun enregitrement ne correspond\n";
    
    }
    
    else {
    	while($row = mysql_fetch_row($result)){
    		$commune = $row[0];
    		$html .= "<option value='$commune'>$commune</option>";
    	}
    }
    
    // Deconnexion de la base de donnees
    mysql_close();
    
    $html .= <<<EOT
    </select>
    		<input type="submit" name="change_style" value="ok" class="form" />
    	</div>
    EOT;
    return $html;
    }
    
    ?>
    Merci de votre aide

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    C'est un problème de PHP, et pas de requête MySQL.
    Sans être un grand spécialiste de la question, c'est parce que tu fais 2 fois appel à la fonction mysql_fetch_row($result) (pour contrôler la première fois si il y a un résultat ou pas)...
    Donc, tu zappes une ligne.

    A mon avis, le ORDER BY ne change rien, tu as quand même une ligne qui disparaît sans le ORDER BY, mais comme ça n'est pas trié, tu ne vois pas laquelle .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Citation Envoyé par ced Voir le message
    Bonjour,

    C'est un problème de PHP, et pas de requête MySQL.
    Sans être un grand spécialiste de la question, c'est parce que tu fais 2 fois appel à la fonction mysql_fetch_row($result) (pour contrôler la première fois si il y a un résultat ou pas)...
    Donc, tu zappes une ligne.

    A mon avis, le ORDER BY ne change rien, tu as quand même une ligne qui disparaît sans le ORDER BY, mais comme ça n'est pas trié, tu ne vois pas laquelle .

    ced
    +1 C'est tout bêtement ca faire un seul appel fait déjà pointer à la premiere ligne. En faire un deuxième fait donc pointer sur le deuxième résultat et ainsi de suite.

    Par ailleurs tu peux simplifier grandement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    function listeVilleCp($cp){
    // Déclaration des paramètres de connexion
    // $host = la_machine;
    $host = "localhost";
    // $user = votre_login;
    $user = "root";
    // $bdd = Nom_de_la_base_de_donnees;
    $bdd = "ljdl";
    // $passwd  = Mot_de_passe;
    $passwd  = "mysql";
    // $cp="code_postal";
    //$cp='14690';
    $html = <<<EOT
    	<div id="selectVille">
    		<select name="selectVille" class="form">
    			<option value="" selected="selected">Sélectionnez une commune</option>
    EOT;
     
    // Connexion au serveur
    mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
     
    mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
     
    // Creation et envoi de la requete
    $query = "SELECT nom FROM villes WHERE code_postal=$cp ORDER BY nom ";
     
    $result = mysql_query($query) or die(mysql_error());
     
    // Recuperation des resultats
    if (mysql_num_rows($result)==0) {
    	echo "Aucun enregitrement ne correspond\n";
     
    }
     
    else {
    	while($row = mysql_fetch_row($result)){
    		$commune = $row[0];
    		$html .= "<option value='$commune'>$commune</option>";
    	}
    }
     
    // Deconnexion de la base de donnees
    mysql_close();
     
    $html .= <<<EOT
    </select>
    		<input type="submit" name="change_style" value="ok" class="form" />
    	</div>
    EOT;
    return $html;
    }
     
    ?>
    Car ainsi cela va tester sur le nombre de lignes retourner sans pointer sur la première ligne d'entré donc le problème devrait être résolu =)

  4. #4
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Par défaut
    Effectivement,

    si tu fais un test avec un mysql_fetch_row, ton premier enregistrement sera récuéperé et non traité dans le dexième mysql_fetch_row. Donc pour vérifier si ta requête contient des enregistrements tu peux utiliser la fonction mysql_num_rows() et faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (mysql_num_rows($result) == 0) {
    	echo "Aucun enregitrement ne correspond\n";
     
    }
     
    else {
    	while($row = mysql_fetch_row($result)){
    		$commune = $row[0];
    		$html .= "<option value='$commune'>$commune</option>";
    	}
    }
    Edit : Désolé j'avais pas vu ta réponse obito. On a écrit une réponse en même temps...
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut Pb résolu.
    Citation Envoyé par jsd03 Voir le message
    Effectivement,

    si tu fais un test avec un mysql_fetch_row, ton premier enregistrement sera récuéperé et non traité dans le dexième mysql_fetch_row. Donc pour vérifier si ta requête contient des enregistrements tu peux utiliser la fonction mysql_num_rows() et faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (mysql_num_rows($result) == 0) {
    	echo "Aucun enregitrement ne correspond\n";
     
    }
     
    else {
    	while($row = mysql_fetch_row($result)){
    		$commune = $row[0];
    		$html .= "<option value='$commune'>$commune</option>";
    	}
    }
    Edit : Désolé j'avais pas vu ta réponse obito. On a écrit une réponse en même temps...


    Merci à tous pour vos réponse rapides et précises.
    Le problème et résolu, mais je ne m'explique toujours pas pourquoi le script fonctionne sans order By.

    Encore merci

  6. #6
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Par défaut
    Il ne fonctionne surement pas mais si tu as plusieurs enregistrement tu ne sait pas lequel il prenait pour vérifier si il y avait des enregistrements retournés. Il suffirait que tu mettes un compteur dans ta boucle pour t'en rendre compte
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  7. #7
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    S'il fonctionne sans order by cela veut seulement dire que lorsque tu as rentré les noms de ville dans ta base de donnée cela a été fait par ordre alphabétique

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut
    Citation Envoyé par ced Voir le message
    Bonjour,

    C'est un problème de PHP, et pas de requête MySQL.
    Sans être un grand spécialiste de la question, c'est parce que tu fais 2 fois appel à la fonction mysql_fetch_row($result) (pour contrôler la première fois si il y a un résultat ou pas)...
    Donc, tu zappes une ligne.

    A mon avis, le ORDER BY ne change rien, tu as quand même une ligne qui disparaît sans le ORDER BY, mais comme ça n'est pas trié, tu ne vois pas laquelle .

    ced

    Désolé ced, mais je confirme qu'en retirant order by, j'ai bien tous les enregistrements. dans le cas ou il n'y a qu'une réponse, je n'ai rien avec order by, mais pas de message d'erreur signalant qu'il n'y a pas de réponse.
    En retirant order by, j'ai bien la réponse attendue.

    @+

  9. #9
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Par défaut
    Regarde ma réponse
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  10. #10
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Citation Envoyé par jsd03 Voir le message
    Regarde ma réponse
    Je dirais même plus la notre Même idée (la meilleur de toute façon )

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

Discussions similaires

  1. insertion d'enregistrement avec MySQL Administrator
    Par Lady_jade dans le forum Outils
    Réponses: 1
    Dernier message: 08/09/2005, 16h04
  2. [Oracle 10] Bizzareté requête avec order by ??
    Par Eric.H dans le forum Oracle
    Réponses: 12
    Dernier message: 22/06/2005, 12h36
  3. Réponses: 4
    Dernier message: 20/06/2005, 14h57
  4. PB avec Order By
    Par Desraux dans le forum SQL
    Réponses: 2
    Dernier message: 15/09/2004, 16h16
  5. Comparer l'enregistrement avec le suivant ...
    Par psyco2604 dans le forum ASP
    Réponses: 3
    Dernier message: 01/06/2004, 17h40

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