Zählen der Anzahl der von db_query () zurückgegebenen Zeilen mit der Anweisung "SELECT"


8

Wie finde ich die Gesamtzahl der Zeilen, die db_query()für die SELECTAnweisung zurückgegeben wurden, oder das Äquivalent von mysql_num_rows()?

Ich benutze MySQL.

Antworten:


6

Wenn Sie sich die db_result()Dokumentation zu Drupal 6 ansehen :

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

Ich habe auch gesehen, dass Sie dies in Drupal 6 tun können:

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

Es sieht so aus, als könnten Sie einfach Folgendes tun:

// 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? Ja, ich habe so etwas auch im Internet gesehen. Das wird es tun. Das ist toll !
— AgA

mysql_num_rows ist in PHP 5.5.0 und höher veraltet, daher müssen wir in Zukunft die verfügbaren Alternativen verwenden.
— Scott Lahteine

und db_result ist in Drupal 7
— wranvaud

@ Drilix - Wenn Sie sich die Frage ansehen, ist sie mit Drupal 6 und nicht mit 7 markiert.
— Cyclonecode

6
$res = db_query("SELECT title FROM {node} WHERE  status = '%d'",  1);

db_query()Gibt ein Objekt zurück und Sie können die Gesamtzahl der Zeilen mit überprüfen $res->num_rows.


1

Es hängt davon ab, ob Sie die Anzahl der Zeilen benötigen, bevor Sie die Ergebnismenge durchlaufen oder nicht.

Wenn Sie es zuvor benötigen, erstellen Sie im Allgemeinen eine SELECT COUNT(*)Abfrage mit denselben Argumenten wie Ihre erste Abfrage und verwenden sie db_result()zum Abrufen.

Wenn Sie es später benötigen, geben Sie einfach eine Variable ein, die Sie während Ihrer Schleife erhöhen:

$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 ist alles, was ich vermeiden möchte. Ich möchte auch eine andere Abfrage vermeiden ..
— AgA

Wenn ja, sollten Sie dies in Ihrer Frage angeben, um nicht von Antworten enttäuscht zu werden und sie herabzustimmen;)
— tostinni

0

Für Drupal 7 können Sie verwenden

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

Für Drupal 7 ist DIES der richtige Weg.
— Stefgosselin

Nein, da dies rowCount()nur für Abfragen gilt, die Zeilen wie INSERT / UPDATE / DELETE betreffen. Siehe die Diskussion unter drupal.org/node/1286238
— Daniel Vérité
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.