Contando il numero di righe restituite da db_query () con l'istruzione “SELECT”


8

Come posso trovare il numero totale di righe restituite db_query()per l' SELECTistruzione o l'equivalente di mysql_num_rows()?

Sto usando MySQL.

Risposte:


6

Se dai un'occhiata alla db_result()documentazione di 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;
}

Ho anche visto che potresti farlo in Drupal 6:

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

Sembra che potresti semplicemente fare:

// 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? Sì, ho visto qualcosa di simile anche su Internet. Questo lo farà. Questo è fantastico!
AgA

mysql_num_rows è deprecato in php 5.5.0 e versioni successive, quindi dovremo utilizzare le alternative disponibili in futuro.
Scott Lahteine,

e db_result è deprecato in Drupal 7
wranvaud il

@Drilix - Se guarda la domanda è taggata con drupal 6 e non 7.
ciclico

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

db_query()restituisce un oggetto e puoi controllare il numero totale di righe usando $res->num_rows.


1

Dipende se è necessario il numero di righe prima di eseguire il ciclo sul set di risultati o meno.

Se ne hai bisogno prima, generalmente esegui una SELECT COUNT(*)query con gli stessi argomenti della tua prima query e la usi db_result()per recuperarla.

Se ne hai bisogno dopo, inserisci una variabile che aumenterai durante il tuo ciclo:

$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
Il looping è tutto ciò che voglio evitare. Voglio anche evitare un'altra domanda ..
AgA

Se è così, avresti dovuto specificarlo nella tua domanda per evitare di essere deluso dalle risposte e di sottoporle al voto;)
tostinni,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.