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 :

LIMIT et résultats érronés [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Par défaut LIMIT et résultats érronés
    bonsoir, je ne sais pas ce qui ce passe, mais lorsque j'utilise LIMIT dans ma requete, les résultats sont érronés.
    Par exemple lorsque je dois avoir un tableau contenant que des raisons sociales qui contiennent "e", j'ai aussi des raisons sociales qui ne contienent pas du tout de "e" qui s'affichent.
    COmment faire pour un meilleur résultat? Meilleur

    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
    //-----------------
     
    $maxRows_rscli = 2;
    $pageNum_rscli = 0;
     
    if (isset($_GET['pageNum_rscli'])) {
      $pageNum_rscli = $_GET['pageNum_rscli'];
    }
    $startRow_rscli = $pageNum_rscli * $maxRows_rscli;
     
     
    mysql_select_db($database_connection, $connection);
     
    $query_rscli = "SELECT *  FROM client WHERE Raison_sociale like '%" .trim($_POST['raison']). "%' "; 
     
    $query_limit_rscli = sprintf("%s LIMIT %d, %d", $query_rscli, $startRow_rscli, $maxRows_rscli);
    $rscli = mysql_query($query_limit_rscli, $connection) or die(mysql_error());
    $row_rscli = mysql_fetch_assoc($rscli);
     
    //-------------------
    if ($row_rscli>0)
      {$message='Enregistrement trouvé';}
      else
      {$message='Recherche infructueuse';}
    //-----------------
     
     
    if (isset($_GET['totalRows_rscli'])) {
      $totalRows_rscli = $_GET['totalRows_rscli'];
    } else {
      $all_rscli = mysql_query($query_rscli);
      $totalRows_rscli = mysql_num_rows($all_rscli);
    }
    $totalPages_rscli = ceil($totalRows_rscli/$maxRows_rscli)-1;
     
    $queryString_rscli = "";
    if (!empty($_SERVER['QUERY_STRING'])) {
      $params = explode("&", $_SERVER['QUERY_STRING']);
      $newParams = array();
      foreach ($params as $param) {
        if (stristr($param, "pageNum_rscli") == false && 
            stristr($param, "totalRows_rscli") == false) {
          array_push($newParams, $param);
        }
      }
      if (count($newParams) != 0) {
        $queryString_rscli = "&" . htmlentities(implode("&", $newParams));
      }
    }
     
    $queryString_rscli = sprintf("&totalRows_rscli=%d%s", $totalRows_rscli, $queryString_rscli);

  2. #2
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    normalement, la clause LIMIT ne sert qu'à afficher un morceau des résultats, genre du 15° au 42°... pour filtrer tes résultats en fonction d'une lettre, utilise LIKE.

    Exemple : toutes les raisons sociales contenant la lettre e :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TA_TABLE WHERE RAISON_SOCIALE LIKE '%e%'

    #

    La clause LIMIT peut être utilisée pour limiter le nombre d'enregistrements retournés par la commande SELECT. LIMIT accepte un ou deux arguments numériques. Ces arguments doivent être des entiers constants.

    Avec un argument, la valeur spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner, le second donne le nombre maximum d'enregistrement à retourner. Le décalage du premier enregistrement est 0 (pas 1) :

    Pour être compatible avec PostgreSQL, MySQL supporte aussi la syntaxe : LIMIT row_count OFFSET offset.

    mysql> SELECT * FROM table LIMIT 5,10; # Retourne les enregistrements 6 à 15

    Pour obtenir tous les enregistrement d'un certain décalage jusqu'à la fin du résultat, vous pouvez utiliser de grands entier en tant que second paramètre :

    mysql> SELECT * FROM table LIMIT 95,18446744073709551615; # Retourne les enregistrements de 96 jusqu'au dernier.

    Si un seul argument est donné, il indique le nombre maximum d'enregistrements à retourner :

    mysql> SELECT * FROM table LIMIT 5; # Retourne les 5 premiers enregistrements

    Autrement dit, LIMIT n est équivalent à LIMIT 0,n.
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Par défaut
    lorsque je mets le "e" en dur dans la requete, il n'ya pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query_rscli = "SELECT *  FROM client WHERE Raison_sociale like '%" ."e". "%' ";
    J'ai les résultats escomptés et je parcours sans problème les liens "suivant" et "précédent"

  4. #4
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Par défaut
    Bonjour,
    En faisant des echo des requetes, tu trouveras peut-etre l'erreur. Si ca se trouve, la chaine que tu obtiens n'est pas celle que tu croyais...
    Une idee comme ca...

    Sohnic

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ("SELECT *  FROM client WHERE Raison_sociale like '%" .$raison. "%' " );
    donne:
    SELECT * FROM client WHERE Raison_sociale like '%e%'
    Est ce normal?

  6. #6
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    et il te retourne quoi quand tu fais ça ? y'a des information de présentation dans ton texte ? des balises BBCode ou html ?

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Par défaut
    je réponds moi même 'oui'

    Seulement, lorsque je clique sur suivant ma requete devient :
    SELECT * FROM client WHERE Raison_sociale like '%%'
    Est normal?

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

Discussions similaires

  1. Limiter les résultats d'une requête à \today\' - n jours
    Par Eddy Duflos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/10/2005, 08h46
  2. Limiter le résultat des résultats
    Par francois78 dans le forum Access
    Réponses: 2
    Dernier message: 15/06/2005, 12h48
  3. Réponses: 4
    Dernier message: 14/12/2004, 14h34
  4. Réponses: 2
    Dernier message: 21/09/2004, 19h01
  5. limiter le résultat retourné par le count
    Par SuperFoustan dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/08/2003, 12h10

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