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 :

Découper les résultats d'une requête [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    février 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2006
    Messages : 279
    Points : 220
    Points
    220
    Par défaut Découper les résultats d'une requête
    Bonjour à tous,

    Pour un affichage particulier, j'ai besoin de scinder les résultats d'une requête mysql en 3 "lots", affichés chacun dans une balise <li>.
    Ma requête comporte un LIMIT plafonné à 12 (pour avoir donc 12 données) mais je voudrais les afficher par paquet de 4 (soit 3 <li>).
    Je ne vois pas trop comment faire avec le while. J'ai tenté avec $i et une condition mais sans succès. Peut-être la fonction count ?

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = mysql_query("SELECT colonnes FROM table ORDER BY rand() LIMIT 0,12");
    echo "<li>";
    while ($donnee = mysql_fetch_assoc($sql)) 
    {
    $titre = $donnee["titre"];
    echo "$titre";
    }
    echo "</li>";
    Ce code, vous l'aurez compris, renvoie une seule <li> avec les 12 résultats.
    Je voudrais donc 3 balises <li> avec 4 résultats à chaque fois, sans réécrire la même requête 3 fois.

    Quelqu'un aurait-il une piste ? Merci d'avance.
    Le mieux n'est pas forcément l'ennemi du bien.

  2. #2
    Nouveau membre du Club
    Inscrit en
    juin 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : juin 2008
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Salut Freedolphin,

    Tu utilises un langage de programmation, tu peux donc créer des fonctions pour éviter de réécrire des parties de codes similaires.
    Tu peux également utiliser for ou foreach par exemple.

    Si tu regardes bien ton code le seul élément qui va changer se situe ici :

    LIMIT 0,12 (edit : il n'en faut que 4)

    Je pense qu'avec ces pistes tu devrais t'en sortir ,

    Cordialement,
    tMS1

  3. #3
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    février 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2006
    Messages : 279
    Points : 220
    Points
    220
    Par défaut
    Merci tMSun mais je ne maîtrise pas bien les boucles avec for et encore moins avec foreach.

    Vaut-il mieux faire un for dans le while ou un while dans le for ?
    Le mieux n'est pas forcément l'ennemi du bien.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ton problème se résume à scinder la liste tous les 4 éléments.
    L'astuce consiste à utiliser le modulo :
    (a % b) = Reste de $a divisé par $b
    Un exemple expliqué ici : V-B. Affichage "en Colonne" - Solution 2
    et appliqué aussi là : VI-A. Affichage "en Colonne" avec BD - Solution 1

    Dans ton cas, il s'agit d'une liste <ul><li> : à toi d'adapter.
    Le principe :
    (0 % 4) = (4 % 4) = (8 % 4) = (12 % 4) = 0
    (1 % 4) = (5 % 4) = (9 % 4) = (13 % 4) = 1
    ...
    Sauf erreur, ca va ressembler à ca :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql = mysql_query("SELECT colonnes FROM table ORDER BY rand() LIMIT 0,12");
    $nbreElements = 4; // tous les 4 éléments
    $compteur=0; // initialisation du compteur
    echo "<ul><li>";
    while ($donnee = mysql_fetch_assoc($sql)) 
    {
       $titre = $donnee["titre"];
       echo "$titre";
       $compteur++; // on incrémente le compteur
       if($compteur % $nbreElements == 0){ echo '</li><li>'; } // on change de <li> tous les $nbreElements éléments
    }
    echo "</li></ul>";
    Dernière modification par Invité ; 08/10/2012 à 18h47.

  5. #5
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    février 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2006
    Messages : 279
    Points : 220
    Points
    220
    Par défaut
    Merci Jérôme, en effet ça fonctionne parfaitement.
    Bien plus simple que de jouer avec for.
    Merci aussi pour les liens, je potasse ça et je m'améliore !
    Bonne soirée.
    Le mieux n'est pas forcément l'ennemi du bien.

  6. #6
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    février 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2006
    Messages : 279
    Points : 220
    Points
    220
    Par défaut
    Juste une petite chose : j'ai une 4ème liste mais vide, à la fin du code, sous la forme <li></li>.
    A quoi est-ce dû ?

    EDIT : c'est bon, j'ai rajouté une condition pour ne pas générer de <li> à la douzième et dernière entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(($compteur%$nbre==0)&&($compteur!=12))
    Le mieux n'est pas forcément l'ennemi du bien.

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

Discussions similaires

  1. Effacer les résultats d'une requête
    Par Nutrino dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/11/2006, 21h54
  2. [SQL] Afficher les résultats d'une requête sur plusieurs pages
    Par mealtone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/09/2006, 13h20
  3. Transformer les résultats d'une requête dans un autre ordre
    Par keikun dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/04/2006, 16h29
  4. 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
  5. [JDBC] Stocker les résultats d'une requête
    Par etiennegaloup dans le forum JDBC
    Réponses: 9
    Dernier message: 26/07/2005, 18h18

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