Menghitung jumlah baris yang dikembalikan dari db_query () dengan pernyataan "SELECT"

8

Bagaimana cara menemukan jumlah baris yang dikembalikan db_query()untuk SELECTpernyataan, atau yang setara dengan mysql_num_rows()?

Saya menggunakan MySQL.

AGA
sumber

Jawaban:

6

Jika Anda melihat db_result()dokumentasi untuk 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;
}

Saya juga melihat bahwa Anda dapat melakukan ini di Drupal 6:

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

Sepertinya Anda bisa melakukannya:

// Execute your query.
$result = db_query($your_query);
// Use mysql_num_rows() on the result set.
$num_rows = mysql_num_rows($result);
Cyclonecode
sumber
mysql_num_rows? Ya saya melihat sesuatu seperti di internet juga. Ini akan dilakukan. Ini bagus!
AgA
mysql_num_rows sudah tidak digunakan lagi di php 5.5.0 ke atas, jadi kita harus menggunakan alternatif yang tersedia di masa depan.
Scott Lahteine
dan db_result tidak digunakan lagi dalam Drupal 7
wranvaud
@Drilix - Jika melihat pertanyaan itu ditandai dengan drupal 6 bukan 7.
Cyclonecode
6
$res = db_query("SELECT title FROM {node} WHERE  status = '%d'",  1);

db_query()mengembalikan objek, dan Anda dapat memeriksa jumlah baris menggunakan $res->num_rows.

Shad
sumber
1

Itu tergantung apakah Anda membutuhkan jumlah baris sebelum mengulang pada set hasil atau tidak.

Jika Anda membutuhkannya sebelumnya, Anda biasanya membuat SELECT COUNT(*)kueri dengan argumen yang sama seperti kueri pertama Anda dan gunakan db_result()untuk mengambilnya.

Jika Anda membutuhkannya setelah itu, cukup masukkan variabel yang akan Anda tambahkan selama loop Anda:

$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
sumber
1
Looping adalah semua yang ingin saya hindari. Saya juga ingin menghindari permintaan lain ..
AgA
Jika demikian, Anda harus menentukan ini dalam pertanyaan Anda untuk menghindari kekecewaan dengan jawaban dan
menurunkannya
0

Untuk Drupal 7 dapat Anda gunakan

$result = db_query($query);
$result->rowCount();
aMod
sumber
Untuk Drupal 7, INI adalah jalan yang harus ditempuh.
stefgosselin
Tidak, karena rowCount()hanya untuk kueri yang memengaruhi baris seperti INSERT / UPDATE / DELETE. Lihat diskusi di drupal.org/node/1286238
Daniel Vérité