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 :

Boucle : Classer par champ avec affichage unique [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut Boucle : Classer par champ avec affichage unique
    Salut,

    Mon titre laisse un peu à désirer alors je vais donner un exemple concret :

    J'ai une table info avec les champs : ID / TITRE / MESSAGE / CATEGORIE

    Je voudrais pouvoir afficher les résultats en classant par CATEGORIE avec un affichage :

    MA CATEGORIE A
    - L'info d'une catégorie A
    - L'info d'une catégorie A
    - L'info d'une catégorie A

    MA CATEGORIE B
    - L'info d'une catégorie B

    MA CATEGORIE C
    - L'info d'une catégorie C
    - L'info d'une catégorie C

    Mon problème c'est que je n'arrive pas à mettre à jour la catégorie pour passer à la suivante.

    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
    $infos = $sql->query("SELECT * FROM "._INFOS_." ORDER BY categorie ASC");
     
    $cat = '';
     
    while ($results = mysql_fetch_assoc($infos)) {
     
    	if ($cat != $results['categorie']) {
     
    			$tpl->assign_vars(array(
    			'CATEGORIE' => $results['categorie'],
    	    ));
     
    			$tpl->assign_block_vars('liste_infos', array(
    			'TITRE' => $results['titre'],
            ));
     
        	}
    $cat = $results['categorie'];
    }
    A l'affichage, la requête m'affiche 1 seule catégorie avec 1 seule info par catégorie de cette manière :

    MA CATEGORIE B
    - L'info d'une catégorie A
    - L'info d'une catégorie B
    - L'info d'une catégorie C

    Si quelqu'un pouvait me filer un coup de pouce, ça serait super!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour,

    je ne connais pas ton moteur de template mais le principe est d'afficher une seule fois(dans le if) l'info répétitive qui est catégorie puis de la mettre à jour
    Code php : 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
     
     
    $infos = $sql->query("SELECT * FROM "._INFOS_." ORDER BY categorie ASC");
     
    $cat = '';
     
    while ($results = mysql_fetch_assoc($infos)) {
     
    	if ($cat != $results['categorie']) {
               $cat = $results['categorie']; //mise à jour de la catégorie
    			$tpl->assign_vars(array(
    			'CATEGORIE' =>   $cat,
    	    ));
     
     
     
        	}
     
      	$tpl->assign_block_vars('liste_infos', array(
    			'TITRE' => $results['titre'],
            ));
     
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Merci pour ton message Armel18.

    Le moteur template est basé sur phpBB2.

    Par rapport à ton code, l'affichage est le suivant :

    MA CATEGORIE C
    - L'info d'une catégorie A
    - L'info d'une catégorie A
    - L'info d'une catégorie A
    - L'info d'une catégorie B
    - L'info d'une catégorie C
    - L'info d'une catégorie C

    J'ai donc cette fois toutes les infos qui s'affichent mais comme sur ma précédente requête, uniquement avec une seule catégorie qui s'affiche.

    Je ne comprends pas pourquoi les autres catégories ne s'affichent pas... la condition if me semble correct.


  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    le mauvais affichage est lié à la gestion de phpbb2.
    sinon tu peux grouper les catégories dans un tableau php puis affecter ce tableau à ta vue.Il te restera plus qu'à boucler, avec 2 boucles les éléments de ton tableau
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    $data=array();
     
    while ($results = mysql_fetch_assoc($infos)) {
     
     $data[$results['categorie']][]=$results;
    }
    var_dump($data);
    //

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Mes compétences PHP étant très limitée, je vais avoir du mal à réaliser ce que tu m'as dit.

    Sinon j'ai une question, est-ce plus facile si je m'orientais sur une boucle imbriquée en créant une table "catégorie". Est-ce que l'affichage pourrait se faire comme souhaité ou est-ce que le template phpBB2 me poserais le même problème qu'au dessus?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    d'après les exemples de la doc, pour assigner un tableau

    https://wiki.phpbb.com/Template.assign_block_vars
    Code php : 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
     
    $data=array();
     
    while ($results = mysql_fetch_assoc($infos)) {
     
     $data[$results['categorie']][]=$results;
    }
     
    foreach( $data as $category=>$items ){
      $template->assign_block_vars('block1', array(
            'CAT'    => $category,
        ));
     
    //Pour chacune des catégories, on assigne le second bloc contenant ses details
    foreach( $items as $k=>$details ){
      $template->assign_block_vars('block1.block2', array(
                'TITRE'        => $details['titre'],
                'NUM'    => $k,
            ));
      }
     
    }

    dans la page html liée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <div>
    <!-- BEGIN block1 -->
     
            <h3>{block1.CAT}</h3>
     
                <p>
                    <!-- BEGIN block2 -->
                    <b>{block1.block2.NUM}</b>: {block1.block2.TITRE}<br>
                    <!-- END block2 -->
                </p>
     
    <!-- END block1 -->
    </div>

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Merci beaucoup Armel 18, c'est exactement ça que je cherchais!!!




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

Discussions similaires

  1. [XL-2010] Envoi mail par excel avec boucle pour tous les champs
    Par jul2012 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/11/2012, 14h54
  2. [MySQL] Tri par champs avec une seule requête
    Par Yoks69 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/10/2008, 08h05
  3. Réponses: 4
    Dernier message: 13/05/2008, 13h18
  4. selection d'un champ avec donnée unique
    Par zugolin dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/10/2007, 12h45
  5. classer par date les resultats de 2 tables avec UNION
    Par dgedge dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/06/2005, 19h23

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