Đếm số lượng hàng được trả về từ db_query () bằng câu lệnh CHỌN LỰA


8

Làm cách nào để tìm tổng số hàng được trả về db_query()cho SELECTcâu lệnh hoặc tương đương với mysql_num_rows()?

Tôi đang sử dụng MySQL.

Câu trả lời:


6

Nếu bạn xem db_result()tài liệu về 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;
}

Tôi cũng thấy rằng bạn có thể làm điều này trong Drupal 6:

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

Có vẻ như bạn chỉ có thể làm:

// 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? Vâng, tôi thấy một cái gì đó giống như trong internet quá. Điều này sẽ làm. Điều đó thật tuyệt !
AgA

mysql_num_rows không được dùng trong php 5.5.0 trở lên, vì vậy chúng tôi sẽ cần sử dụng các lựa chọn thay thế có sẵn trong tương lai.
Scott Lahteine

và db_result không được dùng nữa trong Drupal 7
wranvaud

@Drilix - Nếu nhìn vào câu hỏi, nó được gắn thẻ drupal 6 chứ không phải 7.
Cyclonecode

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

db_query()trả về một đối tượng và bạn có thể kiểm tra tổng số hàng bằng cách sử dụng $res->num_rows.


1

Nó phụ thuộc vào việc bạn có cần số lượng hàng trước khi lặp trên tập kết quả hay không.

Nếu bạn cần nó trước đây, bạn thường thực hiện một SELECT COUNT(*)truy vấn có cùng đối số như truy vấn đầu tiên của bạn và sử dụng db_result()để truy xuất nó.

Nếu bạn cần nó sau, chỉ cần đặt một biến bạn sẽ tăng trong vòng lặp của mình:

$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
Vòng lặp là tất cả những gì tôi muốn tránh. Tôi cũng muốn tránh một truy vấn khác ..
AgA

Nếu vậy, bạn nên xác định điều này trong câu hỏi của mình để tránh bị thất vọng bởi câu trả lời và hạ thấp chúng;)
tostinni

0

Đối với Drupal 7, bạn có thể sử dụng

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

Đối với Drupal 7, NÀY là con đường để đi.
stefgosselin

Không, bởi vì rowCount()chỉ dành cho các truy vấn ảnh hưởng đến các hàng như CHERTN / CẬP NHẬT / XÓA. Xem cuộc thảo luận tại drupal.org/node/1286238
Daniel Vérité
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.