【发布时间】:2014-12-04 09:13:27
【问题描述】:
首先,这是一个很大的系统,但我用的是一个简单的例子。
代码sn-p:
$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
只有当日有输入价格时,系统才会生成数据。如果是周末或节假日,则数据库中没有数据,在这种情况下,11 月 1-2 日和 8-9 日为周末,11 月 12 日为节假日。
我想要实现的是在假期或周末时,它将获取周末/假期前一天的价格。对于周末算法,我通过检查当前行的日期是否为星期六来获取它,然后再显示 2 行和星期五的数据。问题出现在假期时,如果周六或周日是每月的第一天,那么它不会显示数据。
想要的结果是:
--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 你能提供一个例子吗?对于周末,我想我可以检查星期日是在每月的 1 号还是 2 号,然后我会重新查询 strtotime -2 天和 -3 天的价格,但我不知道如何查看假期
标签: php sql sql-server pdo