【问题标题】:codeigniter getting data array inside a datatable columncodeigniter 在数据表列中获取数据数组
【发布时间】:2017-08-03 15:43:02
【问题描述】:

我想在我的数据表行中查看多个数组。我不知道该怎么做。数据表只查询_get_datatables_query 里面的内容。我无法查询其他引用的数据。

public function list_projects() {
  $list = $this->foo_pro->get_datatables();
  $data = array();
  $ProjectID = $_POST['start'];
  foreach ($list as $foo_pro) {
    $ProjectID++;
    $row = array();
    // $row[] = $no;
    $row[] = $foo_pro->P_Year.$foo_pro->Code.$foo_pro->ProjectID;
    $row[] = $foo_pro->Contractor_Name;
    $row[] = $foo_pro->User_Title.'. '.$foo_pro->Dp_LastName;
    $row[] = '<div style="">&#8369;'.number_format($foo_pro->Contract_Amount, 2).'</div>';
    $row[] = $foo_pro->FirstName.' '.$foo_pro->Initial.'. '.$foo_pro->LastName.' #'.$foo_pro->Control_No;
    $row[] = '';
    $row[] = '';
    $row[] = '';
    $data[] = $row;
  }

  $output = array(
    "draw" => $_POST['draw'],
    "recordsTotal" => $this->foo_pro->count_all(),
    "recordsFiltered" => $this->foo_pro->count_filtered(),
    "data" => $data,
  );
  //output to json format
  echo json_encode($output);
}

我想要实现的是1行1列的数组。

我的连接查询。

$this->db->from($this->table);
$this->db->group_by('project.ProjectID');
$this->db->join('contractor', 'contractor.Contractor_No = project.Contractor_No');
$this->db->join('dpwh_user', 'dpwh_user.DPWH_User_No = project.DPWH_User_No');
$this->db->join('contractor_user', 'contractor_user.Contractor_User_No = project.Contractor_User_No');
$this->db->join('qcp', 'qcp.ProjectID = project.ProjectID');
$this->db->join('designmix', 'designmix.ProjectID = project.ProjectID');
$this->db->join('monthlyreport', 'monthlyreport.ProjectID = project.ProjectID');

【问题讨论】:

  • 如果这来自两个表,那么为什么不尝试使用连接查询从数据库中获取数据。 @HanthonyTagam
  • 我实际上发布了加入的声明,但后来被编辑了。

标签: arrays codeigniter datatable


【解决方案1】:

如果您提到了两个表而不是请找到下面提到的查询来完成它。

SELECT 
    p.ProjectId,
    p.Year,
    p.code,
    p.contract_amount,
    GROUP_CONCAT(CONCAT_WS('|',CONCAT_WS('|',mr.month,mr.year),CONCAT(mr.completion,'% <br/>'))) as monthly_report
FROM project p
INNER JOIN monthly_report mr
GROUP BY p.ProjectId;

我还在group_concate() 函数中添加了&lt;br/&gt;,因此当您在浏览器中呈现此输出时,它会根据您的要求添加中断。

如果它不起作用,请告诉我。

Working SQL fiddle

【讨论】:

  • @ankitsuthar:很高兴并感谢您提供 SQL Fiddle。
  • @HanthonyTagam :如果它不起作用或有其他要求,请告诉我
  • @ShyamShinadiya 看起来 &lt;br&gt; 在查询中无法正常工作。
  • 还有另一个选项,在查询中添加\n in concat_ws 并在html中打印时使用nl2br()函数,我希望这会有所帮助
  • 我知道&lt;br&gt; 将在视图中工作有点晚了。不在 SQL 中。
【解决方案2】:

尽管对此comment 的回复是查询 在主动记录技术中。

实际上,在处理子查询时,codeigniter 并不是很好。 (据我所知)我添加了两个选项来处理子查询。如果这两个查询都不能得到你想要的,那么我会建议使用$this-&gt;db-&gt;query();

我还没有测试过。

选项 1

$query = $this->db
    ->select('GROUP_CONCAT(CONCAT_WS('|',CONCAT_WS('|',mr.month,mr.year),CONCAT(mr.completion,'% <br/>'))) as monthly_report, p.ProjectId,p.Year,p.code,p.contract_amount,')    
    ->from('project p')
    ->join('monthly_report mr', 'mr.ProjectId = p.ProjectId', 'left')                               
    ->group_by('p.ProjectId')                   
    ->get();

选项 2

$subquery = "(select GROUP_CONCAT(CONCAT_WS('|',CONCAT_WS('|',mr.month,mr.year),CONCAT(mr.completion,'% <br/>'))) as monthly_report 
            from monthly_report as mr
            where mr.ProjectId = p.ProjectId)";

$query = $this->db
    ->select('p.ProjectId,p.Year,p.code,p.contract_amount') 
    ->select($subquery) 
    ->from('project p')
    ->join('monthly_report mr', 'mr.ProjectId = p.ProjectId', 'left')                               
    ->group_by('p.ProjectId')                   
    ->get();

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多