首先,这是一个很大的系统,但是我使用一个简单的例子。从数据库中不存在的行中检索数据
的代码片断:
$query = "select * from table where date between '2014-11-01' and '2014-11-13'";
$stmt = $con->prepare($query);
$stmt->execute();
$rows = $stmt->fetchAll();
$num = count($rows);
if($num>0){
foreach ($rows as $row) {
echo date('d-m-Y', strtotime($row['Date']));
echo $row['code'];
echo number_format($row['price'], 0, ",", ".");
}
我的查询的结果,从11月1日的数据取到11月13日
date | code | price
2014-11-03 | 'abc' | 140
2014-11-04 | 'abc' | 110
2014-11-05 | 'abc' | 85
2014-11-06 | 'abc' | 100
2014-11-07 | 'abc' | 120
2014-11-10 | 'abc' | 85
2014-11-11 | 'abc' | 97
2014-11-13 | 'abc' | 100
只有当有当天输入价格的系统产生的数据。如果周末或假期没有数据库中的数据,则在这种情况下,Nov 1-2和8-9是周末,而11月12日是假期。
我想达到的是假期或周末时,它会以周末/假日前一天的价格收取价格。对于周末算法,我通过检查当前行的日期是星期六来获取它,然后再显示星期五的数据。问题出现在假期时,如果星期六或星期日是本月的第一天,则不会显示数据。
期望的结果是:
--if the price on 2014-10-31 is 90
date | code | price
2014-11-01 | 'abc' | 90
2014-11-02 | 'abc' | 90
2014-11-03 | 'abc' | 140
2014-11-04 | 'abc' | 110
2014-11-05 | 'abc' | 85
2014-11-06 | 'abc' | 100
2014-11-07 | 'abc' | 120
2014-11-08 | 'abc' | 120
2014-11-09 | 'abc' | 120
2014-11-10 | 'abc' | 85
2014-11-11 | 'abc' | 97
2014-11-12 | 'abc' | 97
2014-11-13 | 'abc' | 100
如果在数据库中存在的日期或创建一个新表,但最好不要使这是一个非常大的数据库必须方便。我如何实现这一目标?谢谢。
你为什么不实现在PHP中的逻辑,而不是试图做它在SQL?即请求的日期范围是'xyz' - 因此您首先检查该日期范围是周末还是假日,然后将日期范围相应地更改为前一日期,然后运行查询? – Latheesan 2014-12-04 09:23:19
@Latheesan你能举个例子吗?对于周末我想我可以检查一下星期日是否在本月的第一或第二天,然后我会重新查询价格以确定-2天和-3天,但我不知道如何检查假期 – anon3776 2014-12-04 09:32:50