按日期范围输出数据
Output data by date range
我想按日期输出汇率
例如:如果用户选择日期“2015-08-23 至 2015-08-25”,则汇率的输出应为 400 + 599 = 999
现在我的查询只获取最后一个日期,所以它只输出该日期的 1 个比率
EG: i select 2015-08-23 到 2015-08-25 所以总速率应该是 999,但它输出的是 599
抱歉,如果我不够清楚
id rid rate sdate edate
1 1 400 2015-08-22 00:00:00 2015-08-22 00:00:00
2 1 400 2015-08-23 00:00:00 2015-08-23 00:00:00
3 1 599 2015-08-24 00:00:00 2015-08-24 00:00:00
4 1 599 2015-08-25 00:00:00 2015-08-25 00:00:00
5 1 599 2015-08-26 00:00:00 2015-08-26 00:00:00
6 1 599 2015-08-27 00:00:00 2015-08-27 00:00:00
7 1 599 2015-08-28 00:00:00 2015-08-28 00:00:00
8 1 599 2015-08-29 00:00:00 2015-08-29 00:00:00
9 1 599 2015-08-30 00:00:00 2015-08-30 00:00:00
10 1 599 2015-08-31 00:00:00 2015-08-31 00:00:00
PHP
$dateentry = array();
// populate $dateentry array with dates
while (strtotime($ci) <= strtotime($co)) {
$dateentry[] = date("Y-m-d", strtotime($ci));
$ci = date ("Y-m-d", strtotime("+1 day", strtotime($ci)));
} // end while
foreach($dateentry as $spd){
echo $spd.'<br/>';
$rating =$dbo->prepare('SELECT rid,sdate,edate,rate FROM rates WHERE rid='.$row->id.' AND (sdate=? AND edate=?) ');
if(!$rating->execute(array($spd,$check_out))){
print_r($rating->errorInfo());
}
$rates12 = $rating->fetch();
$rate .= $rates12["rate"];
}
所以你想得到所有行
(sdate >= '2015-08-23' AND edate <= '2015-08-25')
所以将查询更改为
"SELECT rid,sdate,edate,rate
FROM rates
WHERE rid=$row->id
AND (sdate >= ? AND edate <= ?)";
如果我理解正确的话,您只需对日期之间不同的汇率求和,然后您可以像这样更改您的查询。
$dbo->prepare(
'SELECT sum(a.rate) FROM (
SELECT rate from rates
WHERE 1=1
AND rid='.$row->id.'
AND (sdate>=? AND edate<=?)
group by rate
) as a'
);
可能也有一个解决方案可以在一个查询中完成。
如果您需要对所有费率求和,那么您只需使用以下查询
$dbo->prepare(
'SELECT sum(rate) FROM rates
WHERE 1=1
AND rid='.$row->id.'
AND (sdate>=? AND edate<=?)'
);
我想按日期输出汇率
例如:如果用户选择日期“2015-08-23 至 2015-08-25”,则汇率的输出应为 400 + 599 = 999
现在我的查询只获取最后一个日期,所以它只输出该日期的 1 个比率
EG: i select 2015-08-23 到 2015-08-25 所以总速率应该是 999,但它输出的是 599
抱歉,如果我不够清楚
id rid rate sdate edate
1 1 400 2015-08-22 00:00:00 2015-08-22 00:00:00
2 1 400 2015-08-23 00:00:00 2015-08-23 00:00:00
3 1 599 2015-08-24 00:00:00 2015-08-24 00:00:00
4 1 599 2015-08-25 00:00:00 2015-08-25 00:00:00
5 1 599 2015-08-26 00:00:00 2015-08-26 00:00:00
6 1 599 2015-08-27 00:00:00 2015-08-27 00:00:00
7 1 599 2015-08-28 00:00:00 2015-08-28 00:00:00
8 1 599 2015-08-29 00:00:00 2015-08-29 00:00:00
9 1 599 2015-08-30 00:00:00 2015-08-30 00:00:00
10 1 599 2015-08-31 00:00:00 2015-08-31 00:00:00
PHP
$dateentry = array();
// populate $dateentry array with dates
while (strtotime($ci) <= strtotime($co)) {
$dateentry[] = date("Y-m-d", strtotime($ci));
$ci = date ("Y-m-d", strtotime("+1 day", strtotime($ci)));
} // end while
foreach($dateentry as $spd){
echo $spd.'<br/>';
$rating =$dbo->prepare('SELECT rid,sdate,edate,rate FROM rates WHERE rid='.$row->id.' AND (sdate=? AND edate=?) ');
if(!$rating->execute(array($spd,$check_out))){
print_r($rating->errorInfo());
}
$rates12 = $rating->fetch();
$rate .= $rates12["rate"];
}
所以你想得到所有行
(sdate >= '2015-08-23' AND edate <= '2015-08-25')
所以将查询更改为
"SELECT rid,sdate,edate,rate
FROM rates
WHERE rid=$row->id
AND (sdate >= ? AND edate <= ?)";
如果我理解正确的话,您只需对日期之间不同的汇率求和,然后您可以像这样更改您的查询。
$dbo->prepare(
'SELECT sum(a.rate) FROM (
SELECT rate from rates
WHERE 1=1
AND rid='.$row->id.'
AND (sdate>=? AND edate<=?)
group by rate
) as a'
);
可能也有一个解决方案可以在一个查询中完成。
如果您需要对所有费率求和,那么您只需使用以下查询
$dbo->prepare(
'SELECT sum(rate) FROM rates
WHERE 1=1
AND rid='.$row->id.'
AND (sdate>=? AND edate<=?)'
);