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.