2010-10-10 5 views
4

Dites que j'ai un objet zend_db_select aléatoire.Comptez sur Zend_Db_Select

Comment puis-je effectuer un comptage sur cet objet, donc je connais la quantité d'éléments qui répondent à la requête.

J'ai essayé les éléments suivants:

$data->TotalRecords = $select->columns(new Zend_Db_Expr('COUNT(*)'))->query()->fetch(); 

Mais cela me donne l'erreur suivante:

Message: No table has been specifiedfor the FROM clause

La requête en lui-même fonctionne très bien et retourne un jeu de résultats.

Répondre

1

Utilisez la méthode $select->__toString() pour afficher la requête générée et voir ce qui ne va pas.

Si vous ne disposez pas d'une clause from dans votre requête, ajoutez la méthode From() à votre objet select.

1

Si vous utilisez Zend_Db_Select, vous devez appeler la méthode from pour définir le nom de la table. Avec un Zend_Db_ Tableau _Sélectionnez, la table est passée dans le constructeur, vous n'avez donc pas besoin d'appeler depuis.

9

Il existe plusieurs façons de spécifier les colonnes à extraire dans un Zend_Db_Select. Les deux produits suivants de la même SQL

$select = $db->select() 
      ->from('myTable', array()) 
      ->columns(array('TotalRecords' => new Zend_Db_Expr('COUNT(*)'))); 

$select = $db->select() 
      ->from('myTable', array('TotalRecords' => new Zend_Db_Expr('COUNT(*)'))); 

Le procédé de prend un premier argument, le nom de la table, et un second argument, un ensemble de colonnes à récupérer. Si vous utilisez une expression, vous pouvez spécifier une 'clé' => Expr.

Il est très facile de convertir un Zend_Db_Select en une chaîne SQL pour le déboguer ou l'utiliser avec d'autres fonctions.

echo $select; // prints SELECT COUNT(*) AS `TotalRecords` FROM `myTable` 

Il utilise une méthode toString, qui est appelée automatiquement par Zend_Db chercher des méthodes:

$total = $db->fetchOne($select); 

echo $total; //prints the number of rows matching the query 

Où $ db est une instance de Zend_Db.

0
$select = $db->select(); 

$select->from(
    'table_name', 
    array('cnt' => 'count(1)') 
); 
0

Je viens rencontré le même problème et a découvert ce qui se passe mal

les fonctions Zend_Db_Select::columns attend un tableau au lieu d'un objet ou une chaîne (lorsque le premier paramètre est une chaîne ou d'un objet, il va probablement utilisez ceci comme table principale pour les colonnes que vous donnez mais je ne suis pas sûr de cela.).

Changer votre code

$data->TotalRecords = $select->columns(array(new Zend_Db_Expr('COUNT(*)')))->query()->fetch(); 

Est-ce que résoudre votre problème

Questions connexes