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.