web-dev-qa-db-fra.com

Compter le nombre de lignes renvoyées par db_query () avec l'instruction "SELECT"

Comment puis-je trouver le nombre total de lignes renvoyées dans db_query() pour l'instruction SELECT, ou l'équivalent de mysql_num_rows()?

J'utilise MySQL.

8
AgA

Si vous regardez la documentation db_result() pour 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;
}

J'ai également vu que vous pouviez le faire dans Drupal 6:

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

Il semble que vous puissiez simplement faire:

// Execute your query.
$result = db_query($your_query);
// Use mysql_num_rows() on the result set.
$num_rows = mysql_num_rows($result);
6
Cyclonecode
$res = db_query("SELECT title FROM {node} WHERE  status = '%d'",  1);

db_query() renvoie un objet, et vous pouvez vérifier le nombre total de lignes en utilisant $res->num_rows.

6
Shad

Cela dépend si vous avez besoin du nombre de lignes avant de boucler sur le jeu de résultats ou non.

Si vous en avez besoin auparavant, vous effectuez généralement une requête SELECT COUNT(*) avec les mêmes arguments que votre première requête et utilisez db_result() pour la récupérer.

Si vous en avez besoin après, mettez simplement une variable que vous incrémenterez pendant votre boucle:

$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
tostinni

Pour Drupal 7 vous pouvez utiliser

$result = db_query($query);
$result->rowCount();
0
aMod