2009-10-20 82 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”访问行数。

希望有所帮助。如果您有任何问题,请告诉我。