Contando o número de linhas retornadas de db_query () com a instrução "SELECT"

8

Como localizo o número total de linhas retornadas db_query()para a SELECTinstrução ou o equivalente a mysql_num_rows()?

Estou usando o MySQL.

AgA
fonte

Respostas:

6

Se você consultar a db_result()documentação do Drupal 6:

function db_result($result) {
   if ($result && mysql_num_rows($result) > 0) {
    // The mysql_fetch_row function has an optional second parameter $row
    // but that can't be used for compatibility with Oracle, DB2, etc.
    $array = mysql_fetch_row($result);
    return $array[0];
   }
   return FALSE;
}

Também vi que você poderia fazer isso no Drupal 6:

$num_rows = db_result(
  db_query("SELECT COUNT(*) FROM {node} WHERE type = '%s'", $type->type)
);

Parece que você poderia simplesmente fazer:

// Execute your query.
$result = db_query($your_query);
// Use mysql_num_rows() on the result set.
$num_rows = mysql_num_rows($result);
Cyclonecode
fonte
mysql_num_rows? Sim, eu vi algo como na internet também. Isso serve. Isso é ótimo !
AgA
mysql_num_rows está obsoleto no php 5.5.0 e posterior, portanto, precisaremos usar as alternativas disponíveis no futuro.
Scott Lahteine
e db_result está obsoleto no Drupal 7
wranvaud
@Drilix - Se olhar para a questão é marcado com o Drupal 6 não 7.
Cyclonecode
6
$res = db_query("SELECT title FROM {node} WHERE  status = '%d'",  1);

db_query()retorna um objeto e você pode verificar o número total de linhas usando $res->num_rows.

Sável
fonte
1

Depende se você precisa do número de linhas antes de executar o loop no conjunto de resultados ou não.

Se você precisar antes, geralmente faz uma SELECT COUNT(*)consulta com os mesmos argumentos da sua primeira consulta e usa-a db_result()para recuperá-la.

Se você precisar depois, basta colocar uma variável que você incrementará durante seu loop:

$result = db_query("SELECT nid, title FROM {node} WHERE status = 0");
$total_rows = 0;

while ($row = db_fetch_array($result)) {
  //Process your results here

  //Increment your counter
  $total_rows++;
} 
tostinni
fonte
11
Dar laços é tudo o que quero evitar. Eu também quero evitar outra consulta ..
AgA 16/12
Em caso afirmativo, você deve especificar isso em sua pergunta para evitar ficar desapontado com as respostas e votá-las negativamente;)
tostinni
0

Para o Drupal 7, você pode usar

$result = db_query($query);
$result->rowCount();
aMod
fonte
Para o Drupal 7, este é o caminho a percorrer.
stefgosselin 02/02
Não, porque rowCount()é apenas para consultas que afetam linhas como INSERT / UPDATE / DELETE. Veja a discussão em drupal.org/node/1286238
Daniel Vérité