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.

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);

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.


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++;
} 

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.