Contando el número de filas devueltas desde db_query () con la instrucción "SELECT"

8

¿Cómo encuentro el número total de filas devueltas db_query()para la SELECTdeclaración, o el equivalente de mysql_num_rows()?

Estoy usando MySQL.

AgA
fuente

Respuestas:

6

Si nos fijamos en la db_result()documentación de 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;
}

También vi que puedes hacer esto en Drupal 6:

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

Parece que simplemente podrías hacer:

// Execute your query.
$result = db_query($your_query);
// Use mysql_num_rows() on the result set.
$num_rows = mysql_num_rows($result);
Código ciclónico
fuente
mysql_num_rows? Sí, también vi algo como en internet. Esto lo hara. Esto es genial !
AgA
mysql_num_rows está en desuso en php 5.5.0 y versiones posteriores, por lo que tendremos que usar las alternativas disponibles en el futuro.
Scott Lahteine
y db_result está en desuso en Drupal 7
wranvaud
@Drilix - Si mira la pregunta, está etiquetada con drupal 6 no 7.
Código de ciclón
6
$res = db_query("SELECT title FROM {node} WHERE  status = '%d'",  1);

db_query()devuelve un objeto, y puede verificar el número total de filas usando $res->num_rows.

Sábalo
fuente
1

Depende de si necesita el número de filas antes de recorrer el conjunto de resultados o no.

Si lo necesita antes, generalmente realiza una SELECT COUNT(*)consulta con los mismos argumentos que su primera consulta y la utiliza db_result()para recuperarla.

Si lo necesita después, simplemente ponga una variable que incrementará durante su ciclo:

$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
fuente
1
Looping es todo lo que quiero evitar. También quiero evitar otra consulta ..
AgA
Si lo que debe tener especificar esto en su pregunta con el fin de evitar ser decepcionado por las respuestas y downvoting ellos;)
tostinni
0

Para Drupal 7 puedes usar

$result = db_query($query);
$result->rowCount();
aMod
fuente
Para Drupal 7, ESTE es el camino a seguir.
stefgosselin
No, porque rowCount()es solo para consultas que afectan a filas como INSERT / UPDATE / DELETE. Vea la discusión en drupal.org/node/1286238
Daniel Vérité