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 :

Problème requête SQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut Problème requête SQL
    Bonjour, j'aimerai avoir des précisions sur l'utilisation de requêtes SQL.

    Je m'explique: j'ai une très longue requête (qui fait des recherches dans différentes tables en fonction des données sélectionnées) et j'affiche le résultat par ordre alphabétique. Je veux ajouter la gestion de la pagination (regrouper les résultats affichés par blocs de 20, par exemple).

    Voila comment est construite ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT ... 
    FROM ... 
    WHERE ... 
    AND ...
    AND UPPER ... LIKE '".$_GET["lettre"]."%'
    LIMIT '.($page * $nb).','.$nb.' ''
    ORDER BY ...
    Je pense qu'il y a un problème au niveau de l'ordre des instructions entre limit et order by, mais j'ai effectué plusieurs tests et je ne trouve pas la solution.

    Merci de votre aide!

  2. #2
    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
    De mes souvenir, le LIMIT, doit être placé après un ORDER BY.

    De plus quand tu fais ta requête et que tu utilises des " et des ' ces deux lignes sont incohérentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AND UPPER ... LIKE '".$_GET["lettre"]."%'
    LIMIT '.($page * $nb).','.$nb.' ''
    ne devrait pas plûtot s'écrire : ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mysql_query("....AND UPPER ... LIKE '".$_GET["lettre"]."%'
    ...
    LIMIT ".($page * $nb).", ".$nb);
    De plus pour faire ta pagination il suffirait de faire un limit comme ce-ci non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIMIT ".($page * $nb).", ".(($page * $nb) + $nb));
    ce qui donnerait pour la page 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "...LIMIT ".(3 * 20).", ".((3 * 20) + 20));
    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 !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut
    Merci, effectivement la requête limit se place après le order by, et pour le problème de guillemets c'est moi qui avait mal copié la requête. Maintenant j'ai un nouveau problème, en fait limit m'affiche seulement les 5 premiers résultats, mais ne propose pas d'autres pages pour voir la suite.
    Quand il n'y avait pas la recherche alphabétique, la pagination fonctionnait pourtant.
    Voila un bout de mon code:

    D'abord la construction de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ... 
    FROM ... 
    WHERE ... 
    AND ...
    Et le code php utilisé pour l'alphabet et la pagination
    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
     
     
    	//alphabet pour la recherche par noms
    foreach(range('A','Z') as $lettre) {
    echo '<a href="ListeClients.php?lettre=' .  $lettre . '"> ' . $lettre . ' </a>';
    }
    $requete.="AND UPPER (NomSociete) LIKE '".$_GET["lettre"]."%' ";
     
    //modification : tri par ordre alphabetique
    $requete .="ORDER BY NomSociete ";
     
    //Pagination des recherches (X recherches par page.)
    $nb=5;
    $page = 0;
    if(isset($_GET['page'])) {
       $page = intval($_GET['page']);
    			}
    if(isset($_GET['nb'])) {
       $nb = max(intval($_GET['nb']), $nb); // Assure au moins $nb résultats par page
    			}
    $max_pg = ceil($nbClients / $nb);
    $requete .='LIMIT '.($page * $nb).','.$nb.' ';
    echo "<p>Page actuelle : $page </p>";
    echo "<p>Nb d'enregistrements par page : $nb</p>"
    ?>
     
    <p>Pages :
    <?php
    for($i = 0 ; $i < $max_pg ; $i++) {
    	echo ' <a href="?page='.$i.'&nb='.$nb.'">'.$i.'</a>';
    	}
    ?>
    </p>
    <p>Nb d'enregistrements par page :
    <a href="?page=<?= $page ?>&nb=5">5</a>
    <a href="?page=<?= $page ?>&nb=10">10</a>
    <a href="?page=<?= $page ?>&nb=20">20</a></p>

  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
    Attention tu oublies de faire des échos de tes variables $pages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p>Nb d'enregistrements par page :
    <a href="?page=<?= echo $page; ?>&nb=5">5</a>
    <a href="?page=<?= echo $page; ?>&nb=10">10</a>
    <a href="?page=<?= echo $page; ?>&nb=20">20</a></p>
    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
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut
    Le problème persiste en ajoutant les echo $page , je ne comprends pas...

    Mais avant que j'ajoute la recherche alphabétique, la pagination marchait bien (même sans les echo $page... ).

    Je pense que le problème se situe au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <p>Pages :
    <?php
    for($i = 0 ; $i < $max_pg ; $i++) {
            echo ' <a href="?page='.$i.'&nb='.$nb.'">'.$i.'</a>';
    }
    ?>
    </p>
    car le choix des pages ne s'affiche pas alors que le nombre de recherches par pages est disponible et fonctionne. (Seulement, il n'affiche que les 5, 10 ou 20 premiers résultats).

    Une idée?

  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
    Citation Envoyé par floctc Voir le message
    Le problème persiste en ajoutant les echo $page , je ne comprends pas...
    Étonnant...

    Pourrais-tu faire un echo de la variable $requete pour la lettre A par exemple pour voir si toutes les variables sont bien prises en comptes dans ta requêtes. Et nous afficher le résultat.
    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 !

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

Discussions similaires

  1. Problème requête SQL
    Par mandaillou dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/10/2005, 11h37
  2. Problème requête SQL dans page ASP
    Par rocs dans le forum ASP
    Réponses: 14
    Dernier message: 26/07/2005, 15h38
  3. problème requête sql
    Par psychoBob dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/07/2005, 17h50
  4. problème requête sql
    Par perfectdams dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 21/06/2005, 18h09
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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