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.

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

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.


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.