首先,這是一個很大的系統,但是我使用一個簡單的例子。從數據庫中不存在的行中檢索數據
的代碼片斷:
$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