Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/06/2011, 13h53   #1
Invité de passage
 
Inscription : décembre 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 9
Points : 1
Points : 1
Par défaut Zend_Db problème group by et count

Bonjour,

J'ai un petit souci pour crée une requête qui est la suivante :

Code :
select *,count(*) as count from offres o, produits p where o.id_produit=p.id_produit group by o.id_produit
Ma base de données :

Code :
1
2
3
4
5
6
7
8
9
10
Table Offres
id_offre 	id_produit 	   nom_offre 
1               1                 ....                
2               1                 ....                 
3               2                 ....                 
4               2                 ....                 
Table Produits
id_produit 	designation_produit
1               .....
2               .....

et ma classe ProduitMapper :
Code :
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
<?php
 
class Application_Model_ProduitMapper
{
	protected $_dbTable;
 
    public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }
 
    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_Produit');
        }
        return $this->_dbTable;
    }
 
    public function getOffreCatalogue($id) {
    	$table = $this->getDbTable();
    	$select =$table->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
    	$select->setIntegrityCheck(false);
    	$select->from($table,array('count' => 'COUNT(offres.id_offre)'));
    	$select->where('produits.id_catalogue = ? ', $id);
    	$select->join('offres', 'offres.id_produit = produits.id_produit');
    	$select->group('offres.id_produit');
    	$rowset = $this->getDbTable()->fetchAll($select);
    	return $rowset;
    }
 
}
Mais dans le résultat la valeur de count est 4 alors qu'elle doit être égale à 2
Une idée ?

Merci pour vos réponses
SoulReaper est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 02h18   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
j'ai l'impression que ca vient de ta requete, le jocker * au début fait remonter l'id de l'offre que tu ne peux pas agréger puisqu'ils sont différent...
essaies ça :
Code :
select o.id_produit,count(*) as count from offres o, produits p where o.id_produit=p.id_produit group by o.id_produit
et dis nous ce que ça donne ?!
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 10h37   #3
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 460
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 460
Points : 644
Points : 644
Affiche ta requête pour voir ou est le problème.
Code :
1
2
 
echo $select->__toString();
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 11h23   #4
Invité de passage
 
Inscription : décembre 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 9
Points : 1
Points : 1
Bonjour,

Voilà ce qu'il me donne qu'on j'affiche ma requête

Code :
SELECT `produits`.*, COUNT(offres.id_offre) AS `count`, `offres`.* FROM `produits` INNER JOIN `produits` AS `produits_2` INNER JOIN `offres` ON offres.id_produit = produits.id_produit WHERE (produits.id_catalogue = 1 ) GROUP BY `offres`.`id_produit`

le joker n'est pas spécifié dans ma requête Zend


Edité :

c'est bon j'ai résolu mon problème
il fallait juste passer un tableau vide à
Code :
1
2
$select->from
$select->from(array(),array('count' => 'COUNT(offres.id_offre)'));
SoulReaper est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h45.


 
 
 
 
Partenaires

Hébergement Web