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

Zend_Db PHP Discussion :

[Zend_Db] Probleme pour compter le nombre de commentaire


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut [Zend_Db] Probleme pour compter le nombre de commentaire
    Bonjour,

    Je suis entrain de créer un blog.

    Pour cela, j'ai ceci :

    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
     
    CREATE TABLE `articles` (
    	`id` INT NOT NULL AUTO_INCREMENT ,
    	`titre` VARCHAR( 255 ) NOT NULL ,
    	`date` VARCHAR( 255 ) NOT NULL ,
    	`description` VARCHAR( 255 ) NOT NULL ,
    	`contenu` VARCHAR( 255 ) NOT NULL ,
    	PRIMARY KEY ( `id` )
    ) 	ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
     
    CREATE TABLE `commentaire` (
    	`id` INT NOT NULL AUTO_INCREMENT ,
    	`nom` VARCHAR( 255 ) NOT NULL ,
    	`email` VARCHAR( 255 ) NOT NULL ,
    	`contenu` VARCHAR( 255 ) NOT NULL ,
    	`idArticle` INT NOT NULL, 	
    	PRIMARY KEY ( `id` ),
    	KEY `com_art_fk_constraint` (`idArticle`),
    	CONSTRAINT `com_art_fk_constraint` FOREIGN KEY (`idArticle`)
    	REFERENCES `articles` (`id`)
    ) 	ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    J'affiche sur une page l'ensemble des articles, dans mon controller j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class BlogController extends Zend_Controller_Action 
    {
    	//afficher tous les articles
    	function blogAction(){
    		$this->view->title = "blog";
    		$art = new Article();
    		$this->view->articles= $art->getArticlesAll();
    	}
    Et ensuite j'affiche dans une vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php foreach($this->articles as $articles): 
    				echo '<h3 class="articleTitre">' . $articles->Titre .'</h3>'; 
    				echo '<p class="articleDate"> Le ' .$articles->Date .'</p>';
    				echo '<div class="articleContent">' .$articles->Contenu . '</div>';	
     echo '<p class="article"><a href="' . $this->url(array("controller"=>"blog","action"=>"voirarticle","idArticle"=>$articles->Id)) .'">afficher les commentaires<a/></p>';
    		 endforeach; ?>
    Sur chaque article, il y a un lien pour consulter les commentaires.

    Je cherche à compter le nombre de commentaire pour chaque article, et l'afficher ainsi dans le lien. La requete que je devrais mettre dans mon action 'blogAction' sera celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $com = new Commentaire();
    $nbrComment = $com->select()
    				->from('commentaire',array('nbr' => 'COUNT(*)'))
    				->where('idArticle  = ?', $idArticle);
    Le problème s'est que je ne sais pas comment je peux connaitre l'idArticle.

    J'espère avoir été clair.

    Merci de votre aide

  2. #2
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    C'est exactement le même problème qu'ici :
    http://www.developpez.net/forums/d68...e/#post3982943

    Fais tout une une seule requête, dans ton getArticlesAll() fait une jointure sur la table de commentaire avec un group by sur l'idArticle et un count sur l'idCommentaire.

    Je vais pas te faire toute ta requête vu qu'en plus c'est quasiment la même que dans le lien que j'ai donné mais si tu as besoin d'aide pour la faire, hésite pas à demander.

  3. #3
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Merci! je pense que ca devrait bcp m'aider

  4. #4
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Voila ce que j'ai réussi à faire en suivant tes conseils :

    controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	function blogAction(){
    		$this->view->title = "blog";
    		$art = new Article();
    		$select = $art->select()->setIntegrityCheck(false)
    			->from($art, array('titre,date,description,contenu'))
    			->join('commentaire', 'id=idArticle',array('nbre_commentaire' => 'COUNT(id)'))
    			->group(array('titre,date,description,contenu'));
    		$this->view->articles= $art->getArticlesAll($select);
    	}
    model
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      public function getArticlesAll($select){
    		return $this->fetchAll($select);
      }
    vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		<?php foreach($this->articles as $articles): 
    					echo '<h3 class="articleTitre">' . $articles->titre .'</h3>'; 
    					echo '<p class="articleAuteur">Publié par <b>auth</b></p>';
    					echo '<p class="articleDate"> Le ' .$articles->date .'</p>';
    					echo '<div class="articleContent">' .$articles->contenu . '</div>';
    			 echo '<p class="article"><a href="' . $this->url(array("controller"=>"blog","action"=>"voirarticle","idArticle"=>$articles->id)) .'">afficher les commentaires</a></p>';  endforeach; ?>
    J'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'articles.titre,date,description,contenu' in 'field list'

  5. #5
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Hum en effet ça ne va pas. Tu crée ton array comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->from($art, array('titre,date,description,contenu'))
    C'est comme si tu créait un array avec une seule valeur correspondant à la chaîne de caractère 'titre,date,description,contenu' comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    array(
         0 => 'titre,date,description,contenu'
    );
    Alors que nous voulons un array contenant chaque champ comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    array(
         0 => 'titre',
         1 => 'date',
         2 => 'description',
         3 => 'contenu'
    );
    Faut bien placer tes quotes (et pareil pour le order)

  6. #6
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Mea culpa! j'avais fait un c/c de ma requete

    Sinon, tout marche tres bien, merci beaucoup pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] compter le nombre de commentaire d'une table pour l'article appele dans un autre table
    Par gael-abdelhadi dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/03/2011, 09h24
  2. Requête pour compter le nombre de fils de chaque parent
    Par santana2006 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/08/2006, 16h08
  3. PHP & MySQL : Problème pour compter nombre de tuples ?
    Par ExSter dans le forum Requêtes
    Réponses: 6
    Dernier message: 09/05/2006, 23h03
  4. Requete pour compter le nombre de champs
    Par kichemans dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/04/2006, 14h12
  5. fonction pour compter le nombre de checkbox coché ?
    Par Death83 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/09/2005, 11h28

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