【问题标题】:Codeigniter SQL queryCodeigniter SQL 查询
【发布时间】:2009-10-20 08:51:58
【问题描述】:

我正在尝试使用以下代码执行一个包含 WHERE 子句的 COUNT:

function count_tasks($userId) {

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

}

但 Codeigniter 似乎只运行以下查询:

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

为什么 where 子句没有被执行?我想这与返回$query 有关,但我不确定。

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    试试这个方法:

    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;
        }
    
    }
    

    这应该会给你以下查询(显然 $userId 将被替换为实际值):

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

    我们正在使用 CodeIgniter 的 select() 函数来显式编写查询的 SELECT 部分。然后我们可以使用“count(*)”,它是一个基本计算组中所有记录的 SQL 函数(本质上是 CodeIgniter 的 count_all() 函数所做的,但我们是手动编写的)。 select() 函数的“as task_count”部分只是为我们提供了一些可以从返回的查询中引用的内容。

    然后,我们只需分别设置 SQL 查询的 FROM 和 WHERE 部分。 get() 函数只是运行查询并返回结果,我们将结果分配给 $query。然后我们可以通过“$row->task_count”访问行数。

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

    【讨论】:

      【解决方案2】:
      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;
         }
      

      【讨论】:

        【解决方案3】:

        使用count_all_results

        $this->db->where('active',1);
        echo $this->db->count_all_results('table_name');
        

        【讨论】:

          猜你喜欢
          • 2012-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多