如果我有一张表格来存储一周中不同日子的价格,我将如何根据当天使用相应的列?取决于星期几的价格
表结构:
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
,这将是实现这一目标的最佳方式是什么?
如果我有一张表格来存储一周中不同日子的价格,我将如何根据当天使用相应的列?取决于星期几的价格
表结构:
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'));
参考文献:
+1:我认为它不需要strtotime($ date)只是$ day = strtolower(date('D')); – 2013-02-01 15:29:40
是的,你是对的。删除了'strtotime()' –
这里纯粹的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;
+1只使用SQL语法 – 2013-02-01 15:27:53
相同。好的解决方案 –
$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);
然后 选择{$天} FROM表WHERE ROOM_ID = '1'
你能救自己的悲痛,从长远来看通过重组你的数据 - 有一个Day列(可能是enum('Mon','Tue','Wed','Thu','Fri','Sat','Sun'),以方便使用和阅读)您的价格适用于一周中的哪一天,查询变为(例如星期五):
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等)
'SELECT钱从表WHERE ROOM_ID = 1'? –
难道你不能将表格设置为日栏和七行吗? – Juddling