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

8

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

J'utilise MySQL.

AgA
la source

Réponses:

6

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

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);
Cyclonecode
la source
mysql_num_rows? Oui, j'ai aussi vu quelque chose comme sur Internet. Cela fera l'affaire. C'est bien !
2011 à
mysql_num_rows est déconseillé en php 5.5.0 et supérieur, nous aurons donc besoin d'utiliser les alternatives disponibles à l'avenir.
Scott Lahteine
et db_result est obsolète dans Drupal 7
wranvaud
@Drilix - Si regardez la question, elle est étiquetée avec drupal 6 et non 7.
Cyclonecode
6
$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 à l'aide de $res->num_rows.

Alose
la source
1

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 SELECT COUNT(*)requête 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++;
} 
tostinni
la source
1
La boucle est tout ce que je veux éviter. Je veux aussi éviter une autre requête ..
AgA
Dans l'affirmative, vous devriez avoir précisé cela dans votre question afin d'éviter d'être déçu par les réponses et de les voter en aval;)
tostinni
0

Pour Drupal 7, vous pouvez utiliser

$result = db_query($query);
$result->rowCount();
aMod
la source
Pour Drupal 7, c'est la voie à suivre.
stefgosselin
Non, car rowCount()ne concerne que les requêtes qui affectent des lignes telles que INSERT / UPDATE / DELETE. Voir la discussion sur drupal.org/node/1286238
Daniel Vérité