count pas correct

salut,

J’ai un problème que je n’arrive pas à résoudre.

J’ai 2 tables :

tbl_prono : qui contient 2 rangées

tbl_game : qui contient 3 rangées.

Dans la table tbl_prono j’ai une FK (game_id) qui pointe vers tbl_game.

J’ai bien fait la relation dans le model Prono:




return array(

 'game'=>array(self::BELONGS_TO, 'Game', 'game_id'),

);



Tout marche super, j’arrive à bien afficher dans la vue.

MAIS ! Lorsque je fait dans mon controller pour une certaine action:




$dataProvider=new CActiveDataProvider('Prono', array(

   'criteria'=>array(

   'with'=>array('game'=>array('joinType'=>'RIGHT JOIN')),

)));

            

$this->render('pronos',array('dataProvider'=>$dataProvider,));



Il ne m’affiche pas toutes les rangées. Ils devraient m’en afficher 3, mais il en affiche que 2.

Quand je copie/colle la requête dans phpmyadmin, ca me retourne bien 3 rangées.

En fait, le problème je pense que ca vient de la requête suivante générée par system.db.CDbCommand :


SELECT COUNT(DISTINCT `t`.`id`) FROM `tbl_prono` `t`  RIGHT

JOIN `tbl_game` `game` ON (`t`.`game_id`=`game`.`id`) 



Cette requête me retourne que 2! Pour que cette requête me retourne 3, ca devrait être "SELECT COUNT(*) …"

Cette requête me retourne que 2 car j’ai juste 2 éléments dans tbl_prono. Mais j’ai bien 3 éléments dans tbl_game.

Comme je fait un "RIGHT JOIN" je devrais bel et bien avoir 3 rangées.

Est-ce que quelqu’un aurait une idée pour que je puisse afficher mes 3 colonnes ?

merci

Salut,

J’ai parcouru en vitesse ton poste et je pense qu’il faut que tu utilises un LEFT JOIN.

A+

Merci pour ta réponse, mais c’est bien un right join que je souhaite faire.

Si je fais un left join, c’est bien 2 rangées que j’obtiens. Mais ce n’est pas le résultat que je souhaite.

OK désolé je n’avais pas bien pris le temps de lire.

Donc le problème vient en effet de cette partie:

SELECT COUNT(DISTINCT t.id) car cela signifie qu’il va compter depuis la table tbl_prono sur la colonne id, or lors de ton RIGHT JOIN cette colonne est NULL donc elle n’est pas prise en compte lors du COUNT je pense.

Il faudrait que tu trouves une manière de forcer la colonne sur laquelle est effectuée le COUNT.

J’ai vite fait regardé sur le site YII et il semblerait que la relation STAT a été crée dans cet objectif:

STAT relation doc

Je suis intéressé de savoir comment tu fix le problème, let me know :)

A+

Oui c’est exactement mon problème.

Ok je vais regarder avec STAT et je posterai ma réponse.

merci

EDIT: bon, sans succès…

Si jamais quelqu’un a une idée, je suis preneur

j’ai posté le même problème en anglais

ici

En fait le problème ne vient pas du select count(distinct t.id). Car j’ai modifié CaActiveFinder.php pour que la requête soit bien “count(*)”, mais malgré ça, je vois toujours que 2 rangées dans le CGridBiew…

Je ne sais plus quoi faire…

ESt-ce que le CGridView n’affiche pas la 3ième rangée car la clé primaire est null ?