【问题标题】:Codeigniter Datatable Union and Order byCodeigniter 数据表联合和排序依据
【发布时间】:2014-09-09 07:06:13
【问题描述】:

我正在使用 codeigniter 并使用 jquery 数据表列出。在 codeigniter 中我使用了数据表库,我必须在我的 sql 查询中使用 order by 和 union

mysql查询的样子

SELECT date_format(cp_cuspaydate, '%d-%m-%Y %h:%i:%s %p') as transdate,cp_cusaccno as accno,'Purchase' as particulars,cp_cusamount as amount,
cp_qty as crqty,'-' as drqty, '' as blanceqty
FROM chf_customerpayments
WHERE cp_cusid = 22
UNION
SELECT date_format(credm_reqdate, '%d-%m-%Y %h:%i:%s %p') as transdate,credm_accno as accno,'Redeem' as particulars,'-' as amount,
'-' as crqty,credm_weight as drqty, '' as blanceqty
FROM chf_customerredeemrequest
WHERE credm_cusid = 22 AND credm_status !=2
ORDER BY STR_TO_DATE(transdate,'%d-%m-%Y %h:%i:%s %p') asc;

我需要生成数据表,为此我尝试了以下代码

$this->datatables
              ->select("date_format(cp_cuspaydate, '%d-%m-%Y %h:%i:%s %p') as transdate,cp_cusaccno as accno,'Purchase' as particulars,cp_cusamount as amount,
cp_qty as crqty,'-' as drqty, '' as blanceqty", false)
              ->from('chf_customerpayments')
              ->where('cp_cusid',$this->session->userdata('user_id'))
              ->union('chf_customerredeemrequest')
              ->select("date_format(credm_reqdate, '%d-%m-%Y %h:%i:%s %p') as transdate,credm_accno as accno,'Redeem' as particulars,'-' as amount,
'-' as crqty,credm_weight as drqty, '' as blanceqty", false)
               ->where('credm_cusid = '.$this->session->userdata('user_id').' credm_status !=2');
              echo $this->datatables->generate();

但是数据表库中没有联合函数。如何为我的查询生成数据表。请帮助任何人,在此先感谢

【问题讨论】:

  • 你可以试试这个 ->from('chf_customerpayments UNION chf_customerredeemrequest')
  • 我试过了,但没有用。它将所有字段合并到单个选择中

标签: php jquery codeigniter jquery-datatables


【解决方案1】:

稍微复杂的查询(例如这个)是不可能使用 codeigniters 活动记录的,特别是当嵌套、联合等情况出现时。

使用$this->db->query("..."); 以“老式方式”运行此查询。

一定要通过$this->db->escape(variable)转义你的数据

主要在这种情况下,codeingiter 的活动记录并非设计为在一个查询中具有多个“选择”。这意味着即使您添加“联合”关键字(如评论所建议的那样),它也会将所有“选择”组合到一个语句中。

【讨论】:

  • 是否可以在codeigniter活动记录中查询并与数据表库一起使用
  • 使用$this->db->query和使用活动记录的最终结果几乎是一样的。所以如果可以通过活动记录生成,应该可以通过$this->db->query生成。尽管我不相信它们是直接映射到数据表结构的任何函数。你必须自己做。
  • @VinothKumar 您当前的难题是我从 codeigniter 移至 [laravel] (laravel.com) 的确切原因。 Laravel 的活跃记录 Eloquent 比 Codeigniter 强大得多。
【解决方案2】:

我会简单地分别执行 $query1 和 $query2 两个查询。 然后像这样合并结果集:

$union = array_merge($query1, $query2);

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 2017-06-19
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多