2

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

表结构:

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,那么实现这一目标的最佳方法是什么?

4

5 回答 5

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'));

参考:

于 2013-02-01T15:23:50.950 回答
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;
于 2013-02-01T15:26:10.817 回答
0

从长远来看,您可以通过重组数据来避免悲伤 - 有一个 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,等等)

于 2013-02-01T15:53:22.950 回答
0
$weekDays = array('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat');
$day = $weekDays[date('w')];
mysql_query("SELECT ".$day." FROM table WHERE room_id = 1");
于 2013-02-01T15:29:12.523 回答
0

你可能会做类似的事情

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

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

于 2013-02-01T15:30:50.337 回答