簡體   English   中英

取決於星期幾的價格

[英]Getting price depending on day of the week

如果我有一個表格存儲一周中不同日期的價格,我將如何根據當天使用相應的列?

表結構:

room_id | mon   | tue   | wed   | thu   | fri   | sat   | sun
1       | 50.00 | 40.00 | 50.00 | 55.00 | 60.00 | 60.00 | 40.00

如果我需要今天的價格(2013年2月1日 - 星期五)為room_id#1 ,那么最好的方法是什么?

首先,您將獲得PHP的一天。 今天,或在表格中選擇的日期。

$date = date(); // this grabs today, but you can enter any date you want
$day = date('D', $date); // this gets Mon / Tue / ...
$day = strtolower($day);

$query = "SELECT `{$day}` as price FROM `table` WHERE room_id = 1";

這應該只選擇正確的價格。

這里是新(ish) DateTime類的類似代碼

$date = new DateTime();
$day = strtolower($date->format('D'));

參考文獻:

這里是一個純粹的sql版本。

SELECT  room_ID,
        CASE DAYOFWEEK(CURDATE())
            WHEN 1 THEN sun
            WHEN 2 THEN mon
            WHEN 3 THEN tue
            WHEN 4 THEN wed
            WHEN 5 THEN thu
            WHEN 6 THEN fri
            WHEN 7 THEN sat
        END price
FROM    tableName
// WHERE ....

另一種方法是使用PreparedStatement ,它可以包裝在存儲過程中,

SET @dayName = DATE_FORMAT(CURDATE(),'%a');
SET @sql = CONCAT('SELECT room_ID, `', @dayName, '` FROM tableName');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
$weekDays = array('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat');
$day = $weekDays[date('w')];
mysql_query("SELECT ".$day." FROM table WHERE room_id = 1");

你可能會做類似的事情

$day = date('D',time());
$day = strtolower($day);

然后SELECT {$ day} FROM table WHERE room_id ='1'

你可以通過重組你的數據來保存長期的悲傷 - 有一個日期專欄(可能是枚舉('周一','周二','周三','周四','周五','周六','太陽' ')為了方便使用和閱讀),它保存了您的價格適用的一周中哪一天和查詢(例如星期五):

select price where room_id = 1 and day = 'Fri';

這使您的第一個查詢變得簡單,但由於您可能稍后會進行報告和其他操作,因此它也會使所有后續查詢變得簡單。

對於快捷方式,如果你使enum('Sun','Mon','Tue','Wed','Thu','Fri','Sat')符合ODBC標准,那么你可以使用:

select price where room_id = 1 and day = dayofweek(now());

(因為枚舉的第一個值是1,秒是2,等等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM