[英]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.