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 :

Pourquoi ma requête SQL ne récupère que certains résultats ? [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmarketer
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmarketer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Par défaut Pourquoi ma requête SQL ne récupère que certains résultats ?
    Bonjour,

    J'ai un menu qui lance une requête en fonction de la région sur laquelle on clique.
    Au clic s'affichent les entreprises de la région en question.

    Certaines régions n'affichent pas leurs résultats et d'autres qui affichent ne montrent pas tous leurs résultats.

    Je cherche depuis deux jours et sans trouver de réponse. Quelqu'un aurait une idée du problème ? Merci.

    Voici la requête du menu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $res=ExecRequete("SELECT SQL_SMALL_RESULT region,url FROM BCP_region",$con);
        while($r=ObjetSuivant($res)){
    	$url=$r->url;
            $region=$r->region;
    		echo '<h3><img src="/img/mini/azul.png" />
              <a href="./votre-artisan-en-'.$url.'.html">'.$region.'</a></h3>';
    Voici la requête de la page de résultats :
    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
     
    $res=ExecRequete("SELECT SQL_SMALL_RESULT id,h1,contenu,url,region FROM BCP_artisans WHERE region='$gurl'",$con); 
    $r1=ObjetSuivant($res);
    $region=$r1->region; 
        cdiv('chapeau');
            echo '<h1>Beton cir&eacute; et Cie en '.$region.'</h1>';
        ediv('chapeau H1');
    while($r=ObjetSuivant($res)) {
           $h2=$r->h1;
           $contenu=tronque($r->contenu);
           $url=$r->url; 
     
        cdiv('chapeau');
            echo '<h2><a href="./artisans-'.$url.'.html">'.$h2.'</a></h2>';
            echo $contenu;
    Voici la page de test : http://www.beton-cire-pratique.com/v...de-France.html

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 49
    Par défaut
    Bonjour,

    Je ne connais pas le fonctionnement des fonctions mais elles me semblent suffisamment explicites pour répondre.

    - Sur le deuxième code, il semble qu'une itération soit faite pour obtenir la région, ce qui me semble incorrect, il vaut mieux se baser sur la variable $gurl ( après l'avoir vérifiée bien sûr, pour éviter tout risque d'injection ).
    Du coup quand le while commence, un premier résultat a déjà été lu, il doit donc manquer à l'appel.

    Sinon que donnent les requêtes exécutées directement dans un outil sql?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par défaut
    Salut, à première vue, dans la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res=ExecRequete("SELECT SQL_SMALL_RESULT id,h1,contenu,url,region FROM BCP_artisans WHERE region='$gurl'",$con)
    tu dois concaténer ta variable $gurl avec le reste de la chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res=ExecRequete("SELECT SQL_SMALL_RESULT id,h1,contenu,url,region FROM BCP_artisans WHERE region=".$gurl,$con)
    Alpha.

  4. #4
    Membre averti
    Homme Profil pro
    Webmarketer
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmarketer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Par défaut Pourquoi ma requête SQL ne récupère que certains résultats ?
    Bonjour,
    Merci pour vos réponses.
    Tu sembles avoir raison nonolagalinette, en passant la requête directement dans MySql, j'ai toujours un résultat de plus que sur ma page. Les régions vides ne sont vides que parce que je n'ai qu'un résultat.
    En revanche tu me dis de ne pas faire d'itération mais d'utiliser la variable $gurl.
    Pourrais-tu m'expliquer ?
    Merci encore.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 49
    Par défaut
    Apparemment ton paramètre $gurl contient justement la région à afficher, il est donc inutile de demander au serveur quelles sont les lignes dont 'region' est egal à 'region' pour afficher la colonne 'region'

    En fait je dis qu'il ne faut pas faire d'itération pour récupérer la région, car ainsi tu commence à lire les résultats à partir du deuxième.

    Je m'explique :

    Apparemment ta fonction ObjetSuivant est un curseur.
    Elle prends en paramètre la requête et le curseur se place au premier résultat.

    Au premier appel de la fonction :
    La fonction renvoie la première ligne, puis le curseur se place sur le deuxième résultat
    Au second appel :
    La fonction renvoie la deuxième ligne, puis le curseur se place sur le troisième résultat
    etc.

    Or, à la ligne 8 de ton code, la fonction en est à son deuxième appel, elle renvoie donc le deuxième résultat de ta requête ( ou rien si la requête n'a qu'un résultat ).


    En fait la valeur que tu cherche pour la region est déjà dans ta variable $gurl.

    Il suffit donc de remplacer les lignes 3 à 7 de ton code par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cdiv('chapeau');
            echo '<h1>Beton cir&eacute; et Cie en '.$gurl.'</h1>';
        ediv('chapeau H1');

  6. #6
    Membre averti
    Homme Profil pro
    Webmarketer
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmarketer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Par défaut Pourquoi ma requête SQL ne récupère que certains résultats ?
    Excellent nonolagalinette, j'ai compris !
    Ça marche parfaitement et ça lit tous mes résultats.
    Merci pour ton aide précieuse.

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

Discussions similaires

  1. [MySQL] Imbriquer deux requêtes sql pour avoir un seul résultat
    Par Alexcontact dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/05/2014, 15h56
  2. Pourquoi la requète exemple ne donne que le 1er du mois ?
    Par Chauve souris dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/07/2010, 15h09
  3. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29
  4. Récupérer grâce à une requête SQL que les champs modifiés
    Par guigui11 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/08/2006, 09h58
  5. Réponses: 2
    Dernier message: 24/08/2006, 11h02

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