Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-04-2011 13:22:58

shad797
Membre
Date d'inscription: 07-04-2011
Messages: 16

list a puce via base de donnée

Bonjour à tous,

Débutant avec Zend, j'aimerais requérir votre aide pour un petit problème.

Situation:
-----------
2 tables:
  -Utilisateur: id,non,mail,cat_id(fk)
  -Categorie: id,cat;

Ma requête afin d'afficher le nom,catégorie d'un utilisateur.

Code:

$select = $this->select()
                        ->setIntegrityCheck(FALSE)
                        ->from(array('u'=>'utilisateurs'))
                        ->join (array('c'=>'categorie'),'u.cat_id=c.id',array('Categorie'=>'c.cat'))
                        ->order('u.non ASC');                        
        return $this->fetchAll($select);

[0] => array(5) {
      ["id"] => string(1) "4"
      ["non"] => string(3) "ced"
      ["mail"] => string(12) "ced@mail.com"
      ["cat_id"] => string(1) "2"
      ["Categorie"] => string(8) "Employer"
    }
    [1] => array(5) {
      ["id"] => string(1) "1"
      ["non"] => string(10) "Christophe"
      ["mail"] => string(19) "christophe@mail.com"
      ["cat_id"] => string(1) "2"
      ["Categorie"] => string(8) "Employer"
    }
    [2] => array(5) {
      ["id"] => string(1) "5"
      ["non"] => string(7) "Pasqual"
      ["mail"] => string(16) "pasqual@mail.com"
      ["cat_id"] => string(1) "3"
      ["Categorie"] => string(7) "Ouvrier"
    }
    [3] => array(5) {
      ["id"] => string(1) "2"
      ["non"] => string(4) "tanh"
      ["mail"] => string(13) "tanh@mail.com"
      ["cat_id"] => string(1) "3"
      ["Categorie"] => string(7) "Ouvrier"
    }
    [4] => array(5) {
      ["id"] => string(1) "3"
      ["non"] => string(4) "ziad"
      ["mail"] => string(13) "ziad@mail.com"
      ["cat_id"] => string(1) "2"
      ["Categorie"] => string(8) "Employer"
    }
  }

et mon but est de devoir afficher tout ca comme ca:

    * Catégorie1
          o Nom1             
          o Nom2
    * Categorie2
          o Nom3
          o Nom4

pour le moment j'arrive à ce résultat la:

Code:

<?php foreach ($this->utilisateurs as $utilisateur):?>
<ul>
    <li><?php echo $utilisateur->Categorie; ?></li>
         <ul>
            <li><?php echo $utilisateur->non; ?></li>            
        </ul>    
</ul>
<?php endforeach;?>

* Catégorie1
          o Nom1
    * Catégorie1             
          o Nom2
    * Categorie2
          o Nom3
    * Categorie2
          o Nom4

Si quelqu'un a une petite idée sur comment faire pour arrivé au bon résultat, je suis preneur, merci d'avance.

ps: désolé de ce long poste et ne sachant pas ou le mettre je l'ai mit dans cette section, il faudra peut être le déplace si le post ne correspond pas a cette section.

Hors ligne

 

#2 07-04-2011 14:09:18

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: list a puce via base de donnée

Euh... La requête SQL n'est peut être pas bonne, faudrait voir un group By peut être...

Sinon pour faire simple, tu peux mettre :

Code:

[lang=php]
<?php
    $cat = null;
    foreach ($this->utilisateurs as $utilisateur):
        if($cat == null or $cat != $utilisateur->Categorie) echo '<ul><li>'.$utilisateur->Categorie.'</li><ul>';
        echo '<li>'.$utilisateur->non.'</li>';
        if($cat == null or $cat != $utilisateur->Categorie) echo '</ul></ul>';
        $cat = $utilisateur->Categorie;
    endforeach;
?>

Ou un truc dans ce goût, j'ai pas testé ce code spécifiquement... Par contre c'est sur sale... Pas de séparation données / vue etc, etc...

Hors ligne

 

#3 07-04-2011 14:30:55

shad797
Membre
Date d'inscription: 07-04-2011
Messages: 16

Re: list a puce via base de donnée

J'ai tester un group by "->croup(c.cat);" et il me donne les catégorie ok mais que 1 nom par catégorie alors qu'il y en a plus que ca de nom par catégorie

Hors ligne

 

#4 07-04-2011 19:23:47

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: list a puce via base de donnée

Pourrais-tu poster le résultat d'un Zend_Debug::var($resultat_du_select); ?

Hors ligne

 

#5 07-04-2011 23:16:33

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: list a puce via base de donnée

Je parlais d'un dump de la requête avec le group by en fait (j'avais déjà vu l'autre, mais la seule solution exploitable à partir de ce résultat de BD est un truc dans le goût de ce que je t'ai mis plus haut).

Hors ligne

 

#6 08-04-2011 11:48:17

shad797
Membre
Date d'inscription: 07-04-2011
Messages: 16

Re: list a puce via base de donnée

Ah ok désolé, je te met le résultat de selecte avec le groupby, je regroupe le tout avec le nom de la catégorie. Avec ce résultat la, il me manque des personnes.

Code:

$select = $this->select()
                        ->distinct()
                        ->setIntegrityCheck(FALSE)
                        ->from(array('u'=>'utilisateurs'))
                        ->join(array('c'=>'categorie'),'u.cat_id=c.id',array('Categorie'=>'c.cat'))
                        ->order('u.non ASC')
                        ->group('c.cat');
                        
        return $this->fetchAll($select);

object(Zend_Db_Table_Rowset)#50 (10) {
  ["_data":protected] => array(2) {
    [0] => array(5) {
      ["id"] => string(1) "1"
      ["non"] => string(10) "Christophe"
      ["mail"] => string(19) "christophe@mail.com"
      ["cat_id"] => string(1) "2"
      ["Categorie"] => string(8) "Employer"
    }
    [1] => array(5) {
      ["id"] => string(1) "2"
      ["non"] => string(4) "tanh"
      ["mail"] => string(13) "tanh@mail.com"
      ["cat_id"] => string(1) "3"
      ["Categorie"] => string(7) "Ouvrier"
    }
  }

Dernière modification par shad797 (08-04-2011 11:49:53)

Hors ligne

 

#7 08-04-2011 15:21:48

shad797
Membre
Date d'inscription: 07-04-2011
Messages: 16

Re: list a puce via base de donnée

Ok j'ai remodelé ma requête et j'ai trié le tout par le nom des Catégories et par le nom des utilisateurs (oui je dois avoir les utilisateurs par ordre alphab)

Avec le tri par Catégorie, le code que tu ma passé fonction, voila le résultat brut

Code:

$select = $this->select()                
                        ->setIntegrityCheck(FALSE)
                        ->from(array('u'=>'utilisateurs'))
                        ->join(array('c'=>'categorie'),'u.cat_id=c.id',array('Categorie'=>'c.cat'))
                        //->group('u.non')
                        ->order('c.cat ASC')
                        ->order('u.non ASC');
L'affichage
    * Employer
          o ced

# Christophe
# ziad

    * Ouvrier
          o Pasqual

# tanh

Maintenant j'ai juste à ajouter 2-3 trucs pour la présentation

Dernière modification par shad797 (08-04-2011 15:23:15)

Hors ligne

 

#8 10-04-2011 18:29:12

shad797
Membre
Date d'inscription: 07-04-2011
Messages: 16

Re: list a puce via base de donnée

Pour ceux à qui sa intéresse voila la solution complète qui fonctionne

Je sélectionne tout les utilisateurs ainsi que leur catégories et je les trie par nom et catégorie

Code:

[lang=sql]$select = $this->select()                
                    ->setIntegrityCheck(FALSE)
                    ->from(array('u'=>'utilisateurs'))
->join(array('c'=>'categorie'),'u.cat_id=c.id',array('Categorie'=>'c.cat'))                        
                        ->order('c.cat ASC')
                        ->order('u.non ASC');

l'affichage

Code:

[lang=phtml]<ul>
<?php 
    $cat = null;
    foreach ($this->utilisateurs as $utilisateur) 
    {
        if($cat == null)
        {
?>            <li><?php echo $utilisateur->Categorie;?></li>
                <ul>
                    <li><?php echo $utilisateur->non;?></li>
                    
<?php             $cat = $utilisateur->Categorie;
        }
        elseif ($cat == $utilisateur->Categorie)
        {
?>            <li><?php echo $utilisateur->non;?></li>
<?php     }
        else
        {
?>            </ul>
            <li><?php echo $utilisateur->Categorie;?></li>
                <ul>
                    <li><?php echo $utilisateur->Categorie;?></li>
                    
<?php             $cat=$utilisateur->Categorie;
        }
    }
?>
</ul></ul>

qui donne bien     
    * Employer
          o ced
          o Christophe
          o ziad
    * Ouvrier
          o Ouvrier
          o tanh

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages