2009-10-20 85 views
0

我嘗試這樣做,有一個COUNT WHERE子句中它與下面的代碼:笨SQL查詢

function count_tasks($userId) { 

    $this->db->count_all('tasks'); 
    $this->db->where('tasksAssignedTo', $userId); 
    $query = $this->db->where('taskPriority_taskPriorityId !=', 6); 
    return $query; 

} 

但是笨似乎只運行下面的查詢:

SELECT COUNT(*) AS `numrows` FROM `tasks` 

爲什麼where子句沒有執行?我想這與返回$query有關,但我不確定。

回答

1
function count_tasks($userId) { 
     $this->db->count_all('tasks'); 
     $this->db->where('tasksAssignedTo', $userId); 
     $query = $this->db->where('taskPriority_taskPriorityId !=', 6); 

     return $query; 

修改您的查詢。 count_all函數停止類的SQL構建。

function count_tasks($userId) 
    { 
      $this->db->where('tasksAssignedTo', $userId); 
      $this->db->where('taskPriority_taskPriorityId !=', 6); 
      $query = $this->db->count_all('tasks'); 

      return $query; 
    } 
2

試試這個辦法來代替:

function count_tasks($userId) { 

    $this->db->select('count(*) as task_count'); 
    $this->db->from('tasks'); 
    $this->db->where('tasksAssignedTo', $userId); 
    $this->db->where('taskPriority_taskPriorityId !=', 6); 

    $query = $this->db->get(); 

    foreach ($query->result() as $row) { 
     echo $row->task_count; 
    } 

} 

這應該給你下面的查詢(顯然$用戶id將有一個真正的價值代替):

SELECT count(*) as task_count FROM (`tasks`) WHERE `tasksAssignedTo` = $userId AND `taskPriority_taskPriorityId` != 6 

我們使用CodeIgniter的選擇( )函數來明確寫入查詢的SELECT部分​​。然後我們可以使用「count(*)」,它是一個SQL函數,基本上統計了一個組中的所有記錄(實際上是CodeIgniter的count_all()函數的功能,但是我們正在手動編寫它)。 select()函數的「as task_count」部分只是給了我們從返回的查詢中引用的東西。

然後,我們分別簡單地設置我們的SQL查詢的FROM和WHERE部分。 get()函數只是運行查詢並返回結果,並且我們已將結果分配給$ query。然後我們可以通過「$ row-> task_count」訪問行數。

希望有所幫助。如果您有任何問題,請告訴我。