php - 根据蛋糕php中的日期将mysql行拆分为多行

标签 php mysql arrays cakephp cakephp-2.0

我的数据如下表所示-

enter image description here

但是我想根据日期将 mysql 行拆分为多行

enter image description here

因为我想计算两个日期之间发送电子邮件的数量,如下代码 -

$condition[] = array(
                'LeadTime.send ' => 1
                'DATE(LeadTime.date) >= ' =>   $this->request->data['from_date'],
                'DATE(LeadTime.date) <= ' =>   $this->request->data['end_date'],
                );
}
$count = $this->Time->find('count', array(
                             'conditions' => $condition,
                              ));
pr($count);

我不是首先应该在日期列上联合表数据库还是直接我可以在 cake php 中实现它。

请指导我。

最佳答案

这是一个 SQL 语句,它将根据您的表设计计算结果。

SELECT  SUM(IF(first_send = 1 
                 AND first_start_date BETWEEN from_date AND end_date
                 AND second_send = 1 
                 AND second_start_date BETWEEN from_date AND end_date
             ,2,1)) as amount
FROM times
WHERE 
  (first_send = 1 AND first_start_date BETWEEN from_date AND end_date)
  OR 
  (second_send = 1 AND second_start_date BETWEEN from_date AND end_date);

在 Cakephp 中实现:您可能应该使用 prepared statement因为在创建列时停止 SQL 注入(inject)将会很困难。

$db = $this->Time->getDataSource();
$db->fetchAll(
    'SELECT  SUM(IF(first_send = 1 
                 AND first_start_date BETWEEN ? AND ?
                 AND second_send = 1 
                 AND second_start_date BETWEEN ? AND ?
             ,2,1)) as amount
     FROM times
     WHERE 
      (first_send = 1 AND first_start_date BETWEEN ? AND ?)
       OR 
      (second_send = 1 AND second_start_date BETWEEN ? AND ?)',
  array($this->request->data['from_date'],$this->request->data['end_date']
       ,$this->request->data['from_date'],$this->request->data['end_date']
       ,$this->request->data['from_date'],$this->request->data['end_date']
       ,$this->request->data['from_date'],$this->request->data['end_date']));
<小时/>

使用find的困难/问题是防止sql注入(inject),如下面的代码所示。

$this->Time->virtualFields['amount'] = 'SUM(IF(first_send = 1 
                 AND first_start_date BETWEEN' . $this->request->data['from_date'] . ' AND ' . $this->request->data['end_date']
                 . ' AND second_send = 1 '
                 . ' AND second_start_date BETWEEN ' . $this->request->data['from_date'] . ' AND ' . $this->request->data['end_date']
                 . ',2,1))';

$conditions = array('OR' =>(
    array('AND'=>array('Time.first_send' => '1'
                      ,'Time.first_start_date BETWEEN ? AND ?' => 
                          array($this->request->data['from_date']
                               ,$this->request->data['end_date']))),
    array('AND'=>array('Time.second_send' => '1'
                      ,'Time.second_start_date BETWEEN ? AND ?' => 
                          array($this->request->data['from_date']
                               ,$this->request->data['end_date'])))
  ));

$this->Time->find('all',array(
    'conditions' => $conditions,
    'fields' => array('amount'),
    ));

关于php - 根据蛋糕php中的日期将mysql行拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28934941/

相关文章:

php - 为什么 laravel 序列化 session 数据而不是 session 编码/解码

php - 本地主机拒绝连接Xampp问题

mysql - 增加表列参数

javascript - 如何访问嵌套的 JSON 对象键和值

python - 迭代将列附加到python中的数组

php - 用户事件提要(ala facebook)。如何对相似的事件进行分组?

php - PHP register_shutdown_function 1秒延迟

javascript - Ionic Angular 将数据传递到 PHPfile 并插入 MySQL 数据库

php - 如何在 CI 中的非对象上获取 num_rows()

arrays - 剥离列或行以形成一维数组