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.

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

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.


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

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

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é
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.