Рассчитывать на Zend_Db_Select - PullRequest
4 голосов
/ 10 октября 2010

Скажем, у меня есть случайный объект zend_db_select.

Как я могу выполнить подсчет этого объекта, чтобы я знал количество предметов, которые соответствуют запросу.

Я попробовал следующее:

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

Но это дает мне следующую ошибку:

Сообщение: таблица не указана для предложения FROM

Запрос сам по себе работает нормально и возвращает набор результатов.

Ответы [ 5 ]

10 голосов
/ 11 октября 2010

Есть несколько способов указать столбцы для выборки в Zend_Db_Select.Следующие два продукта одинаковы 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(*)')));

Метод from принимает первый аргумент, имя таблицы, а второй аргумент - массив столбцов для выборки.Если вы используете выражение, вы можете указать 'key' => Expr.

Действительно легко преобразовать Zend_Db_Select в строку SQL для отладки или использования с другими функциями.

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

При этом используется метод toString, который автоматически вызывается методами выборки Zend_Db:

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

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

Где $ db - это экземпляр Zend_Db.

1 голос
/ 11 октября 2010

Если вы используете Zend_Db_Select, вам нужно вызвать метод from, чтобы установить имя таблицы.С Zend_Db_ Table _Select таблица передается в конструктор, поэтому вам не нужно вызывать из.

1 голос
/ 10 октября 2010

Используйте метод $select->__toString(), чтобы вывести сгенерированный запрос и посмотреть, что с ним не так.

Если в вашем запросе нет предложения from, добавьте метод From() к выбранному объекту.

0 голосов
/ 07 октября 2013

Я только что столкнулся с той же проблемой и выяснил, что идет не так

функции Zend_Db_Select::columns ожидают массив вместо объекта или строки (когда первый параметр является строкой или объектом, он, вероятно, будет использовать его в качестве основной таблицы для указанных вами столбцов, но я не уверен в этом.).

Изменение вашего кода на

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

Исправит вашу проблему

0 голосов
/ 20 октября 2011
$select = $db->select();

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