如果我有一个表格存储一周中不同日期的价格,我将如何根据当天使用相应的列?
表格结构:
room_id | mon | tue | wed | thu | fri | sat | sun
1 | 50.00 | 40.00 | 50.00 | 55.00 | 60.00 | 60.00 | 40.00
如果我需要room_id#1
的今天价格(2013年2月1日 - 星期五),那么实现这一目标的最佳途径是什么?
答案 0 :(得分:5)
首先,您将获得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'));
<强>参考文献:强>
答案 1 :(得分:4)
这里是纯粹的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;
答案 2 :(得分:0)
$weekDays = array('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat');
$day = $weekDays[date('w')];
mysql_query("SELECT ".$day." FROM table WHERE room_id = 1");
答案 3 :(得分:0)
您可以执行类似
的操作$day = date('D',time());
$day = strtolower($day);
然后 SELECT {$ day} FROM table WHERE room_id ='1'
答案 4 :(得分:0)
你将通过重组你的数据来保存长期的悲伤 - 有一个日期专栏(可能是枚举('周一','周二','周三','周四','周五','周六' ,'太阳')易于使用和阅读),它保存您的价格适用的一周中的哪一天和查询(例如星期五):
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,等等)