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.

AgA
quelle

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);
Cyclonecode
quelle
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.

Shad
quelle
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++;
} 
tostinni
quelle
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();
aMod
quelle
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é