【问题标题】:Output data by date range按日期范围输出数据
【发布时间】:2015-11-16 10:20:54
【问题描述】:

我想按日期输出汇率

例如:如果用户选择一个日期“2015-08-23 到 2015-08-25”,那么汇率的输出应该是 400 + 599 = 999

现在我的查询只获取最后一个日期,因此它只输出该日期的 1 个比率

EG:我选择 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"];
       }

【问题讨论】:

  • 您的汇率看起来很奇怪,就像一个字符串,一个范围应该同时开始和结束是很奇怪的

标签: php mysql loops date output


【解决方案1】:

如果我理解正确,您只需将日期之间不同的费率相加,那么您可以像这样更改您的查询。

$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-26 到 2015-08-28 输出为 2396;我的数据库:26 是 250 和 27 是 599,应该总计 849
  • 我看不到问题sqlfiddle.com/#!9/56814/1/0你能告诉我更多细节吗?请检查链接。
  • 好的,所以查询没有问题,这可能是我的输出,因为我输出了另一个名为“rooms”的表中的房间详细信息,然后我循环它,然后我在(房间)循环输出费率,然后我循环费率。
  • 现在我尝试使用您的代码,但它什么也没输出,没有错误。像这样的空白(净额)
  • 上面的查询只是一个例子。您是否尝试过根据需要修改此示例?例如,如果您在其他地方使用此查询,您可能需要为 sum(rate) 设置别名。您是否也尝试过仅对您的数据库执行此查询,而没有上面提到的所有其他内容?它会返回任何结果吗?最后,如果我理解正确率是多少,那么架构是反对规范化studytonight.com/dbms/database-normalization.php
【解决方案2】:

所以你想得到所有的行

(sdate >= '2015-08-23' AND edate <= '2015-08-25')

所以将查询改为

"SELECT rid,sdate,edate,rate 
   FROM rates 
  WHERE rid=$row->id
    AND (sdate >= ? AND edate <= ?)";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2014-10-20
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多