Tout d'abord, c'est ce que j'essaie de faire: p>
Dans l'une de mes classes de la bibliothèque, je souhaite compter le montant total des rangées d'un résultat de recherche. La classe utilise un objet de sélection défini par le modèle de l'annexe du résultat de la recherche. Mon problème est maintenant, cette sélection () a déjà défini les colonnes demandées par (), mais pour compter simplement les lignes, je veux simplement sélectionner l'ID, car le site Web doit être performant. Je ne peux pas simplement modifier les valeurs de l'objet, car je l'utilise dans la bibliothèque et les variables sont protégées. Malheureusement, Zend n'a pas de fonction pour la commande MySQL Count Count et je ne souhaite pas utiliser le code statique MySQL, car cela pourrait être, que nous changeons notre système de base de données à l'avenir. P>
Voici ma question: p>
Y a-t-il une possibilité par Zend_Sélectionnez comment changer les colonnes sélectionnées? P>
4 Réponses :
Ceci est d'un projet et n'est pas testé, mais l'un d'entre eux devrait fonctionner. ou strong> p> Ceci est identique à celui P> SELECT COUNT(id) as my_col FROM table_name
Malheureusement, pas, je reçois une exception: vous ne pouvez pas définir un nom de corrélation 'BD_USERS' plus d'une fois
Vous pouvez transmettre un tableau vide comme premier paramètre, car vous n'avez pas besoin de ré-ajouter la table. De cette façon, cela n'essaiera pas de refluer la corrélation.
Pour utiliser une commande MySQL dans une sélection, vous devez utiliser zend_db_expr:
$select = $this->select() ->from('myTable', new Zend_Db_Expr('COUNT(id) as count')); echo $select; //SELECT COUNT(id) as count FROM myTable;
Je ne suis pas dans un modèle et je ne peux pas écrire ce code à l'intérieur d'un modèle. Veuillez lire la question.
Si vous souhaitez utiliser le comptage, une manière appropriée doit être de (MyTable ', tableau (' Compte '=> nouveau zend_db_expr (' comptez (*) ')) code> (ou ID au lieu de * Si vous besoin). Mais vous ne devriez jamais alias rien vous-même.
Essayez ceci:
$select->reset(Zend_Db_Select::COLUMNS) ->from('thetable', 'COUNT(*)');
Je devais aussi retirer la constante de, mais c'est exactement ce que je cherchais, merci beaucoup!
J'ai des "jointures intérieures" dans ma requête et après la réinitialisation des colonnes, il ajoute automatiquement une "join interne" avec la table de la table! Qu'est-ce que je fais mal?
Celui-ci n'a pas fonctionné pour moi (je ne devais sélectionner que d'une table jointe): Peut-être parce que j'avais des jointures. Mais néanmoins, voici la solution: utiliser la réinitialisation (), puis les colonnes (): p> juste FYI, la version de Zend Framework est 1.12 P> P> P> P> P> P> >