Существует ли способ получить количество записей от запроса с платформой Зенда?

Для файла второго класса добавьте «package Dan;» как первый, чтобы убедиться, что они находятся в одной упаковке; изменить "импорт Dan.Vik.disp;" быть "импорт Dan.Vik;"

7
задан MichaelICE 11 June 2009 в 20:27
поделиться

5 ответов

Use fetchAll()

fetchAll returns an array, so you can do something like this:

$rows = $db->fetchAll("select ...");
$numRows = sizeof($rows);
foreach ($rows as $row)
{
  // process each row
}
2
ответ дан 6 December 2019 в 12:53
поделиться

Он по-прежнему требует другого запроса, но в MySQL есть параметр SELECT SQL_CALC_FOUND_ROWS - он сохраняет значение в вашем соединении, которое затем вы можете SELECT FOUND_ROWS ()

Примечание - производительность вашего первоначального запроса снизится, потому что ограничение будет обработано позже, но оно может быть быстрее, чем отдельный COUNT ().

FOUND_ROWS ()

$query = "Select SQL_CALC_FOUND_ROWS * from Users where active = 1 limit 20";
$stmt = $db->query($query);

while ($row = $stmt->fetch())
{

  // processing
}

$count = $db->fetchOne('SELECT FOUND_ROWS()');
13
ответ дан 6 December 2019 в 12:53
поделиться

If you are returning the entire result set in your SQL query, you can do a fetchAll() instead of a fetch(), and then count() the number of items in the array returned from fetchAll().

However, if you are doing paging with a MySQL LIMIT clause or equivalent, you will only get the count for number of items returned for that query(page). There's no way to get the entire count of results without doing a COUNT() in SQL in this case. You can only do calculations based on the resultset from the database.

0
ответ дан 6 December 2019 в 12:53
поделиться

Кекоа ошибается.

Если вы поместите этот SQL_CALC_FOUND_ROWS, а затем, если вы установите ограничение, вы получите полное количество строк (ограничение не зависит от этого).

Если у вас простая таблица, тогда рекомендуется использовать count (*) в разбивке на страницы, поскольку это намного быстрее, но если у вас есть сложные запросы, и ваши данные являются результатом многих объединений и т.д., то мой совет - использовать SQL_CALC_FOUND_ROWS.

Надеюсь, это вам поможет.

BornForCode

0
ответ дан 6 December 2019 в 12:53
поделиться

Странно, но это просто работает:

$oSelect = $oTable->select()
                ->where(...)
                ->order(...)
                ->limit(...)
$oRows = $oTable->fetchAll($oSelect);
// these two lines are the solution: we simply run the query again!
$db->query($oSelect);
$iTotal = $db->fetchOne("select FOUND_ROWS()");

я должен упомянуть, что я использую эту строку в своем конфигурационном файле:

db.profiler.enabled = true

вот некоторый код для идей пера; однако он не работает:

$query = $db->select()
->from('your_table', array(new Zend_Db_Expr('SQL_CALC_FOUND_ROWS id as fake_column'),'*'))
->where(...)
->limit(0, 10);

$db->query($query);

$iCount = $db->fetchOne('select FOUND_ROWS()');

также посмотрите на http://old.nabble.com/RE:-CALC_FOUND_ROWS-vs.-count%28*%29-p16761518.html

1
ответ дан 6 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: