按日期范围输出数据

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<=?)'
);