7
votes

Zend: Sélectionnez Objet: Comment remplacer les colonnes sélectionnées définies par ()?

Tout d'abord, c'est ce que j'essaie de faire:

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.

Voici ma question:

Y a-t-il une possibilité par Zend_Sélectionnez comment changer les colonnes sélectionnées?


0 commentaires

4 Réponses :


1
votes

Ceci est d'un projet et n'est pas testé, mais l'un d'entre eux devrait fonctionner. xxx pré>

ou strong> p> xxx Pré>

Ceci est identique à celui P>

SELECT COUNT(id) as my_col FROM table_name 


2 commentaires

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.



-1
votes

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;


2 commentaires

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 (*) ')) (ou ID au lieu de * Si vous besoin). Mais vous ne devriez jamais alias rien vous-même.



17
votes

Essayez ceci:

$select->reset(Zend_Db_Select::COLUMNS)
       ->from('thetable', 'COUNT(*)');


2 commentaires

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?



1
votes

Celui-ci n'a pas fonctionné pour moi (je ne devais sélectionner que d'une table jointe): XXX

Peut-être parce que j'avais des jointures. Mais néanmoins, voici la solution: utiliser la réinitialisation (), puis les colonnes (): xxx

juste FYI, la version de Zend Framework est 1.12 >


0 commentaires