我的数据如下表所示-
但是我想根据日期将 mysql 行拆分为多行
因为我想计算两个日期之间发送电子邮件的数量,如下代码 -
$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/