【问题标题】:WHERE clause in the query doesn't work properly in CodeIgniter 3查询中的 WHERE 子句在 CodeIgniter 3 中无法正常工作
【发布时间】:2022-01-22 01:59:57
【问题描述】:

我正在为一个项目使用 CodeIgniter 3,并在控制器中编写了以下函数以将一些数据传递给视图。它查询数据库中的表以获取血型作为标签,并获取“isAvailable = 1”的每种血型的行数。然后将这些数据传递到视图中以呈现图表。但正如你所看到的,这些计数是错误的。即使“isAvailable = 0”,它也会计算行数。我的代码有什么问题,我该如何解决?

控制器中的功能。

public function bloodTypesChart()
    {

        $chartData = [];
        $blood_types = $this->db->query("SELECT (BloodType) as blood_type FROM packets WHERE (isAvailable) = '1' GROUP BY blood_type")->result_array();

        foreach($blood_types as $bt)
        {
            $record =  $this->db->query("SELECT COUNT(PacketID) as count FROM packets WHERE BloodType = '{$bt['blood_type']}'")->result_array();

            foreach($record as $row) {
                $chartData['label'][] = $bt['blood_type'];
                $chartData['data'][] = $row['count'];
            }
        }
        $chartData['chart_data'] = json_encode($chartData);
        $this->load->view('insight',$chartData);
    }

查看

<script>
    new Chart(document.getElementById("bar-chart"), {
        type: 'bar',
        data: {
            labels: <?= json_encode($label)?>,
            datasets: [
                {
                    label: "Donations",
                    backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850"],
                    data: <?= json_encode($data)?>
                }
            ]
        },
        options: {
            legend: { display: false },
            title: {
                display: true,
                text: 'Donations'
            }
        }
    });
</script>

【问题讨论】:

    标签: php mysql codeigniter codeigniter-3


    【解决方案1】:

    在您的查询中,因为您封装了括号中的字段名称,WHERE (isAvailable) = '1' 的计算结果为WHERE there is a field labeled isAvailable - 对于表中的每一行都是如此。删除括号,它应该可以正常工作

    $blood_types = $this->db->query("SELECT (BloodType) as blood_type FROM packets WHERE isAvailable = '1' GROUP BY blood_type")->result_array();
    

    【讨论】:

      【解决方案2】:

      你这个方法太复杂了,避免使用php循环来获取你可以通过简单查询得到的数据。

      只要使用这个 mysql 查询,计算 isAvailable 行,当 true (1) 时:

      $sql=" SELECT BloodType as blood_type, COUNT(PacketID) as mycount 
             FROM packets 
             WHERE isAvailable = 1 
             GROUP BY blood_type
           ";
      

      注意:我已将别名 count 更改为 mycount,因为 count 是保留字。

      你的函数看起来是这样的:

      public function bloodTypesChart()
          {
              $sql=" SELECT BloodType as blood_type, COUNT(PacketID) as mycount 
                  FROM packets 
                  WHERE isAvailable = 1 
                  GROUP BY blood_type
               ";    
      
              $chartData = [];
              $blood_types = $this->db->query($sql)->result_array();
      
              foreach($blood_types as $row)
              {
                      $chartData['label'][] = $row['blood_type'];
                      $chartData['data'][] = $row['mycount'];
              }
              $chartData['chart_data'] = json_encode($chartData);
              $this->load->view('insight',$chartData);
          }
      

      这里是 sql-fiddle 使用您的数据库的简化版本执行查询

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 2019-09-07
        相关资源
        最近更新 更多