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 :

[Doctrine] Select Distinct


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Par défaut [Doctrine] Select Distinct
    Bonjour à tous , voici mon problème .
    Après vous avoir demandé comment construire dynamiquement un tableau contenant les différentes clés (activités ) de ma table .J'ai de nouveau un souci .

    action.class :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    <?php
     
    /**
     * activites actions.
     *
     * @package    SaisieTemps
     * @subpackage activites
     * @author     Your name here
     * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
     */
    class activitesActions extends sfActions
    {
      protected $niveau;
     
       /**
      * Executes index action
      
      * @param sfRequest $request A request object
      */
      public function executeIndex(sfWebRequest $request)
      {
     
        $i = 1;
        $niveaux1 = Doctrine_Query::create()
               ->select('code,nom')
               ->from('activites')
               ->where('pere_id IS NULL and active = "1"')
               ->fetchArray(); //On exécute la requête
     
     
     
          foreach($niveaux1 as $niveau1)
           {
             $this->niveau[$i][] = array('code'=>$niveau1['code'],'nom'=>$niveau1['nom']);
             $id = $niveau1['id'];
             $this->enfant($id,$i);  
           }
           $this->niveaux = $this->niveau;
     
      }
     
     
     
         protected function enfant($id,$i)  
          {
             $niveaux2 = Doctrine_Query::create()
                    ->select ('code,nom')
                    ->from('activites')
                    ->where('pere_id = ? and active = "1"',array($id))
                    ->fetchArray(); 
     
            if(isset($niveaux2[0]))
              {
                $i++;
                foreach($niveaux2 as $niveau2)
                {
                    $this->niveau[$i][] = array('code'=>$niveau2['code'],'nom'=>$niveau2['nom']);       
                    $this->enfant($niveau2['id'],$i);    
                }
              }
          }
     
    }
     
    ?>
    IndexSuccess :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
      <link type="text/css" href="../css/ui.multiselect.css" rel="stylesheet" />
     
      <script type="text/javascript" src="../js/plugins/localisation/jquery.localisation-min.js"></script>
      <script type="text/javascript" src="../js/plugins/tmpl/jquery.tmpl.1.1.1.js"></script>
      <script type="text/javascript" src="../js/plugins/blockUI/jquery.blockUI.js"></script>
      <script type="text/javascript" src="../js/ui.multiselect.js"></script>
      <script type="text/javascript">
        $(function(){
        	$.localise('ui.multiselect', {/*language: 'fr',/* */ path: 'js/locale/'});
          $(".multiselect").multiselect();
          $("#tabs").tabs();
          //getter
          var dividerLocation = $('.selector').dialog('option', 'dividerLocation');
          //setter
          $('.selector').dialog('option', 'dividerLocation', 0.4);
     
        });
      </script>
     
     
     
     </script>
    <?php include_component('home','header',array('titre' => 'Extraction de données brute'))?>
    <div id='formulaire' style="width: 95%; margin-left: auto; margin-right: auto" align="left">
    <p><b class="d1top"><b class="r11"></b><b class="r12"></b><b class="r13"></b><b class="r14"></b></b></p>
    <center><h><STRONG><FONT SIZE=5>Activités :</FONT></STRONG></h2></center> <br></br>
    <div class='formulaire'>
     
     
     <div id="tabs" >
          <ul >
     
     
         <?php   foreach($niveaux as $i=>$niveau):?>
            <li><a href="#tabs-<?php echo $i?>">Niveau <?php echo $i?></a></li>
         <?php endforeach;?>
     
          </ul>
     
          <?php   foreach($niveaux as $i=>$niveau):?>
          <div id="tabs-<?php echo $i?>">
            <form action="" target="submitFrame" style="border:medium;">
            <dl>
            <select class="multiselect" multiple="multiple" name="niveau[]" style="width: 70% ; margin-left: auto; margin-right: auto" align="center" >
                <?php   foreach($niveau as $activite):?>
                <option value="<?php echo $activite['code']?>"><?php echo $activite['nom']?></option>
                <?php endforeach;?>
              </select>
     
            </dl>
            </form>
         </div> 
         <?php endforeach;?>  
     
     
     
     
     
     
    </div>
     
     
    </div>
     
     
     
    </form>
    </div>
    ( Désolé pour le code qui n'est pas forcément des mieux présenté. )

    Voila le résultat pour le niveau 2 de mes activités :

    http://img203.imageshack.us/img203/8974/test3k.jpg

    Le problème est qu'une sous activité peut être du même nom dans plusieurs activités. ( Ex: Appro peut etre présent dans une activité Absence , et dans une autre .. )
    Or , comme vous pouvez le constater , il s'affiche plusieurs fois le meme libellé , ceci en fait pour nombre d'entre mes clés. Or ce que je souhaiterais , c'est n'afficher qu'une seule fois cette clé dans ce tableau , qui , en la cochant , sélectionnerait toutes les clés du même nom .

    Savez vous quel petit bout de code dans ma requête me permettrait de faire ceci ,car j'ai beau essayé d'utiliser le distinct, cela ne fonctionne pas.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Par défaut
    25 vues , aucune rep .. Merci !

  3. #3
    Nouveau candidat au Club
    Femme Profil pro
    Développeur
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Par défaut
    Bonjour,

    Je sais que cela fait plusieurs semaines que le sujet existe, mais ayant eu le même problème dernièrement, je pense que poster la réponse peut être utile à d'autres personnes.

    Donc il faut faire 2 choses :
    1. ecrire DISTINCT en majuscule
    2. mettre un alias au champ de la table


    au final on se retrouve avec quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function getDistinctValue() {
    	    $q = Doctrine_Query()::create()
    	        ->select('DISTINCT column_name as some_column')
    	        ->from('SomeTable');
    	    return $q->execute();
    	}
    Le execute() peut être changé en fetchArray().

    Dans mon cas, avec execute(), cela a fonctionné.

    Source : ici

    Cordialement,
    Shirubya.

  4. #4
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut
    Salut,
    tu peux tenter avec un GROUP BY sinon....

    Guigo

Discussions similaires

  1. [Doctrine] select distinct
    Par grabriel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/08/2009, 09h55
  2. Select distinct
    Par mic79 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/04/2005, 16h30
  3. select distinct substring
    Par nmerydem dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/06/2004, 16h58
  4. Select distinct et order by
    Par arsgunner dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/06/2004, 11h17
  5. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 19h33

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