Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour
ça va faire bientôt 2 mois que j'ai dit oui.
Tout se passait bien jusqu'à hier, quand il m'a fallut écrire une requête qui doit me permettre de sélectionner les 6 vidéos les plus commentées.
j'ai donc 2 tables (commentaires_videos et videos).
traditionnellement on a ceci
<code>
select v.id_video, count(cv.id_commentaire) as total
from videos v inner join commentaires_video cv on (v.id_video = cv.id_video)
group by v.id_video
order by total desc
limit 0,6;
</code>
Cela passe bien lorsque je l'exécute directement dans ma BD
Comment pourrais-je traduire cela en en Zend_Db_select ?
Merci de m'aider.
Dernière modification par zepas (13-08-2010 12:39:36)
Hors ligne
Salut,
Je dirais :
$select = $videoTable->select()->setIntegrityCheck(false); $select->from(array('v' => 'videos'), array('id_video')) ->leftJoin(array('cv' => 'commentaires_video'), 'v.id_video = cv.id_video', array('total' => 'COUNT(id_commentaire)')) ->group('v.id_video') ->order('total DESC') ->limit(0, 6);
A vérifier, je travaille plus trop avec Zend_Db.
A+ benjamin.
Hors ligne
Merci Delprog pour ta reponse, mais j'ai réussi à construire ma requête.
Voici comment j'ai crée ma requête :
class monModel extends Zend_Db_Table_Abstract { protected $_name = 'videos'; protected $_primary = 'id_video'; public function maFonction(){ $select = $this->_db->select('v.id_video') ->from( array( 'v' => $this->_name) ) ->joinInner(array('cv' => 'commentaires_video'), 'cv.id_video = v.' . $this->_primary, array('total' => 'COUNT(cv.id_commentaire)')) ->group('v.' . $this->_primary) ->order( 'total DESC') ->limit(6); $stmt = $this->_db->query($select); return $stmt->fetchAll(); } }
Dernière modification par zepas (13-08-2010 13:52:56)
Hors ligne