【问题标题】:How can I grab values from a database, sum them, and display them in codeigniter?如何从数据库中获取值,对它们求和,然后在 codeigniter 中显示它们?
【发布时间】:2016-04-08 20:33:02
【问题描述】:

我想对具有特定 WHERE 条件的数据库列求和,然后将其显示在网页上,但我不确定如何执行。

这是迄今为止我在控制器中的功能。

public function get_hours() {
    $user_email = $this->session->userdata('USER_EMAIL');
    $this->db->where('USER_EMAIL', $user_email);
    $this->db->select_sum('USER_WORK_HOURS');
    $data = $this->db->get('user_hours');
    $hours = $data->row()->USER_WORK_HOURS;
    echo $hours;
}

这将带我进入一个空白页面并且不显示任何内容。

我也尝试过回显 $data,但收到一个错误,说它无法将其转换为字符串。

这是我的看法:

<!DOCTYPE html>
<html lang="en">
<body>
<div class="container">
   <h1>Members</h1>
   <?php
   echo "<pre>";
   print_r($this->session->all_userdata());
   echo "</pre>";
   $this->load->helper('date');
   echo "<h2>";
   echo $date = date('Y-m-d H:i:s');
   echo "</h2>";
   ?>
   <a href="<?php echo 'clock_in' ?>">Clock In</a> <br />
   <br />
   <a href="<?php echo 'clock_out' ?>">Clock Out</a> <br />
   <br />
   <a href="<?php echo 'get_hours' ?>">Get Hours</a> <br />
   <br />
   <a href="<?php echo 'main/logout' ?>">Logout</a> </div>
</body>
</html>

其他信息:

  • 我要求和的列是 phpmyadmin 中的 TIME 格式

如果需要任何其他信息,请告诉我。

提前致谢。

编辑:

已找到答案。感谢 Putu Yoga 和 Bishnu Paudel 的帮助。

更正的代码:

public function get_hours()
{

$user_email = $this->session->userdata('USER_EMAIL');

$this->db->select('SEC_TO_TIME( SUM( TIME_TO_SEC( `USER_WORK_HOURS` ) ) ) AS totalHours'); 
$this->db->where('USER_EMAIL', $user_email);
$hours= $this->db->get('user_hours')->row()->totalHours;

echo $hours;

} 

【问题讨论】:

    标签: php mysql database codeigniter mysqli


    【解决方案1】:

    试试这个

    public function get_hours()
    {
    
    $user_email = $this->session->userdata('USER_EMAIL');
    
    $this->db->select('SEC_TO_TIME( SUM( TIME_TO_SEC( `USER_WORK_HOURS` ) ) ) AS workduration '); 
    $this->db->where('USER_EMAIL', $user_email);
    $query = $this->db->get('user_hours');
    $hours = $query->result();
    
    echo $hours[0]->workduration;
    }
    

    【讨论】:

      【解决方案2】:

      试试这个:

      public function get_hours()
      {
      
      $user_email = $this->session->userdata('USER_EMAIL');
      
      $this->db->select('SEC_TO_TIME( SUM( TIME_TO_SEC( `USER_WORK_HOURS` ) ) ) AS totalHours'); 
      $this->db->where('USER_EMAIL', $user_email);
      $hours= $this->db->get('user_hours')->row()->totalHours;
      
      echo $hours;
      
      } 
      

      【讨论】:

      • 漂亮。谢谢。
      【解决方案3】:

      试试这个

      public function get_hours()
      {
      
      
          $user_email = $this->session->userdata('USER_EMAIL');
      
          $this->db->where('USER_EMAIL', $user_email);
      
          $this->db->select_sum('USER_WORK_HOURS');
      
          $data = $this->db->get('user_hours');
      
          $hours = $data->result();
      
          echo $hours;
      
      } 
      

      【讨论】:

      • 这给了我一个通知:“数组到字符串的转换”并在页面上显示“数组”
      • 试试 var_dump($hours);
      • array(1) { [0]=> object(stdClass)#21 (1) { ["USER_WORK_HOURS"]=> NULL } }
      • USER_WORK_HOURS 是您的字段
      • 那是我要总结和显示的列,是的。
      【解决方案4】:

      据我所知,您不能直接在 mysql 中的 TIME 数据类型上调用 SUM()。您必须先使用TIME_TO_SEC() 函数将其转换为数字,然后再将其转换回TIME

      我会给你直接的 SQL 例子,关于这种方法:

      SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( `USER_WORKS_HOUR` ) ) ) AS timeSum
         FROM YourTableName WHERE `USER_EMAIL` = $email
      

      也许您可以先在 phpmyadmin 上测试 SQL 查询,然后再在实际应用程序中运行。干杯!

      【讨论】:

      • 感谢您的回复。我在 phpmyadmin 中运行它,它运行但显示为 NULL。不知道为什么
      • 嗯,这表明你的 sql 不正确。尝试不使用WHERE 子句运行,是否有效?
      • 它在有和没有 WHERE 子句的情况下运行。无论哪种方式都只显示 NULL
      • 奇怪,对我来说效果很好。我认为您的某些USER_WORKS_HOUR 值是NULL,请尝试添加WHERE USER_WORKS_HOUR IS NOT NULL
      • 我得到它的工作,错误的列名在那里。它是 USER_WORK_HOURS。而不是 USER_WORKS_HOUR。
      【解决方案5】:

      试试这个,不确定但可能有用。

      public function get_hours()
      {
      
      $user_email = $this->session->userdata('USER_EMAIL');
      
      $this->db->where('USER_EMAIL', $user_email);
      
      $this->db->select_sum('USER_WORK_HOURS');
      
      $data = $this->db->get('user_hours');
      
      $hours = $data->row();
      
      echo $hours->USER_WORK_HOURS;
      
      } 
      

      【讨论】:

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