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

ORM PHP Discussion :

Doctrine et group by


Sujet :

ORM PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Par défaut Doctrine et group by
    Salut,

    J'ai un problème pour l'affichage des résultats d'une requête avec doctrine

    Voici ma requête :

    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
     
    public function getNombreAccidentsParTypeAccidentEtDepartement($comp=false, $iddepartemment){
     
     			$dates = $this->setDate($comp);
     
    			$q = Doctrine_Query::create()
    			->select('count(*) as nombre, typ.libelle as type, ')
    			->from('Declaration d')
    			->leftjoin('d.TypeAccident typ, d.Service s, s.Departement dep')
    			->where($this->where_date." AND ".$this->where_clones." AND dep.iddepartement = ?",array($dates[0],$dates[1],$iddepartemment))
    			->groupBy('type')
    			->execute()
    			->getData();
     
    			if(count($q) > 0){
    				return $q;
    			}
     		}
    Une déclaration est liée à un service, lui même lié à un département.
    Une déclaration est lié à un type d'accident.

    La requête (getSqlQuerry) effectuée dans mysql me renvoie trois ligne de résultat pour un id de département que je force à 2 (par exemple)

    Voici la requête sql un peu adapté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
     SELECT COUNT( *  ) AS nombre, t.libelle AS
    TYPE
    FROM Declaration d
    LEFT JOIN TypeAccident t ON d.idtypeaccident = t.idtypeaccident
    LEFT JOIN Service s ON d.idservice = s.idservice
    LEFT JOIN Departement d2 ON s.iddepartement = d2.iddepartement
    WHERE (
    d.date_accident >= '2010-06-01 00:00:00'
    AND d.date_accident <= '2010-06-17 00:00:00'
    AND d.iddeclaration_org IS NULL
    AND d2.iddepartement =2
    )
    GROUP BY TYPE
    LIMIT 0 , 50
    Elle me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nombre 	type
    1 	choc / coup
    2 	chute / glissade
    3 	Manutention
    Dans ma vue quand j'essaye d'afficher les résultats, je ne parviens à avoir qu'une ligne par requête exécuté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
    15
    16
    17
    18
    19
    20
    21
    22
    <?php $resultat = $sf_request->getParameter("ids_dept") ?>
     
    		<?php foreach ($resultat as $departement){ ?>
    		    <?php $r = $stat->getNombreAccidentsParTypeAccidentEtDepartement(false,$departement);?>
    	     	<?php if (isset($r)) { ?>
    	     			<h4><?php echo $departement ?></h4>
    					<table class="Fixe">
    						<thead>
    						    <tr>
    						      <th>Type d'accident</th>
    						 	  <th>Nombre</th>
    						 	  <th>Proportion</th>
    						    </tr>
    					    </thead>
    				     	<tbody>
    			    			 <?php foreach($r as $result){ ?>
    			    			 		<th><?php echo($result->getTypeAccident());?></th>
    							 <?php } ?>
    						</tbody>
    					</table>
    			<?php } ?>
    		<?php } ?>
    Quelqu'un aurait une idée ?

    Pour d'autres requêtes, je n'ai pas le souci, elles se ressemble pourtant beaucoup :

    par exemple :

    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
    public function getNombreAccidentsParTypeAccident($comp=false){
     
     			$dates = $this->setDate($comp);
     
     			$q = Doctrine_Query::create()
     				->select('count(*) as nombre, d.matricule_rh, typ.libelle as typeAccident')
     				->from('Declaration d')
     				->leftjoin('d.TypeAccident typ')
     				->where($this->where_date." AND ".$this->where_clones,array($dates[0],$dates[1]))
     			    ->groupBy('typ.libelle')
     			    ->orderBy('typ.libelle')
     				->execute()
                	->getData();
     
     			return $q;
     
     		}
    et l'affichage des résultats :

    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
    <table class="Fixe">
    		<?php $r = $stat->getNombreAccidentsParTypeAccident(true); ?>			
    		  <thead>
    		    <tr>
    		      <th>Service</th>
    		 	  <th>Nombre d'Accidents</th>
    		    </tr>
    		  </thead>
    		  <tbody>
    		    <?php foreach($r as $result){ ?>
    		    	<tr>
    					<th><?php echo($result->getTypeAccident());?></th>
    					<td><?php echo($result->getNombre());?></td>
    				</tr>
    			<?php } ?>
     
    		     </tbody>
    		</table>
    Merci du coup de main, je galère vraiment à trouver d'où ça vient...

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 19
    Par défaut
    Je rencontre également le même problème que toi. Lorsque j'exécute une requête via Doctrine, une seule ligne m'est renvoyée. Pour être certain de la requête générée, j'ai fait un "getSqlQuery". Lorsque je teste celle-ci directement en base, plusieurs lignes me sont renvoyées...
    Le hic apparaît lorsque j'utilise innerJoin ou bien leftJoin.
    As tu pu solutionner ton problème depuis hier?

    Edit: Je viens de trouver la réponse à mon problème et sûrement au tiens. En faisant chauffer Google, je suis tombé sur ce billet du trac de Doctrine où un utilisateur a justement le même problème que nous. Il lui est précisé qu'il faut ajouter dans le select au moins une clé primaire des tables dont tu sers dans tes jointures.

    J'espère avoir pu t'aider

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Par défaut
    Yep merci pour ta réponse. dommage que je ne l'ai pas vue avant. J'avais fini par m'en rendre compte. C'est bizarre comme comportement non ?

    Merci en tout cas. J'espère que d'autres tomberont sur ce post et ne chercheront pas des plombes..

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 13
    Par défaut
    Bonsoir

    Je me permets vous questionner à ce sujet, car je pense mon problème identique: j'essaie de sélectionner, à partir d'une base phpBB, les fichiers joints.

    Classe Attachements
    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
    class Attachments extends Doctrine_Record
    {
        public function setTableDefinition()
        {
    	$this->setTableName('phpbb_attachments');
     
    	$this->hasColumn('attach_id', 'integer', 8, array('primary' => true,'autoincrement' => true));
    	$this->hasColumn('post_msg_id', 'integer', 8);
    	$this->hasColumn('topic_id', 'integer', 8);
    	$this->hasColumn('poster_id', 'integer', 8);
    	$this->hasColumn('real_filename', 'string', 255);
    	$this->hasColumn('attach_comment', 'string', 4000);
    	$this->hasColumn('download_count', 'integer', 8);
        }
     
    	public function setUp() {
        	$this->hasOne (
        		'Users as us', 
        		array(
        			'local' => 'poster_id', 
        			'foreign' => 'user_id'
        		)
        	);
        }
     
     
    }
    Classe Users
    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
    class Users extends Doctrine_Record
    {
        public function setTableDefinition()
        {
    	$this->setTableName('phpbb_users');
     
    	$this->hasColumn('user_id', 'integer', 8, array('primary' => true,'autoincrement' => true));
    	$this->hasColumn('username', 'string', 255);
        }
     
    	public function setUp() {
    			$this->hasMany(
    				'Attachments', 
    				array(
    					'local' => 'user_id', 
    					'foreign' => 'poster_id'
    				)
    			);
    		}
     
    }
    La requête qui ne retourne qu'un enregistrement...
    $requete = Doctrine_Query::create()
    ->select('a.attach_id, a.attach_comment, a.download_count, a.poster_id, u.user_id, u.username')
    ->from('Attachments a')
    ->leftJoin('a.us u')
    ->groupBy('a.topic_id')
    ->execute();

    foreach($requete as $news)
    {
    echo '<li>'.$news->attach_comment.' [ <a href="./forums/download/file.php?id='.$news->attach_id.'" title="'.$news->download_count.'">zip</a> ] posté par <a href="forums/memberlist.php?mode=viewprofile&u='.$news->poster_id.'">'.$news->us->username.'</a></li>'."\n";
    }
    Et ma base n'est pourtant pas vide...


    Pourriez-vous m'aiguiller ?

    Merci d'avance.

Discussions similaires

  1. [Doctrine] Le GROUP BY à revisiter
    Par MightyDucks dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 29/09/2011, 11h54
  2. [CR8] Groupes nommés par ordre spécifié
    Par PschittN dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/05/2004, 23h46
  3. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21
  4. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01

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