2011-12-13 21 views

回答

1

您可以使用查詢的方便的fetchAll()方法將所有結果加載到數組中,然後將該數組計數爲正常。這將導致只有一個查詢正在執行:

$query = db_select('node', 'n'); 
$query->fields('n', array('nid', 'title', 'status')); 
$results = $query->execute()->fetchAll(); 

$count = count($results); 

foreach ($results as $result) { 
    // ... 
} 
+0

謝謝!假設有一些方法可以將內容加載到數組中:D – SomethingOn

2

您正在尋找:

countQuery()

在您的例子,你可以使用:

$query = db_select('node', 'n'); 
$query->fields('n', array('nid', 'title', 'status')); 
$num_rows=$query->countQuery()->execute()->fetchField(); 

來算的結果,事後獲取它們:

$result=$query->execute(); 
+0

因此,有沒有簡單的方法直接從SelectQuery結果做到這一點?真的不希望有兩次查詢數據庫沒有建立另一個查詢對象:( – SomethingOn

+0

我不認爲你需要建立另一個查詢對象 - 你可以使用現有的countQuery後(見編輯的答案),但當然,sql在這個解決方案中執行了兩次...... – Nebel54

0

我認爲這是更有效的嘗試這個,而不是。

$result = db_select('table_name' ,'t'); 
$result->fields('t')->execute(); 
$num_of_results = $result->rowCount(); 
相關問題