取决于星期几的价格

时间:2013-02-01 15:21:10

标签: php mysql sql pdo

如果我有一个表格存储一周中不同日期的价格,我将如何根据当天使用相应的列?

表格结构:

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日 - 星期五),那么实现这一目标的最佳途径是什么?

5 个答案:

答案 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,等等)