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で1日を取得します。今日、またはフォームで選択された日付。

$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";

これにより、正しい価格のみが選択されます。

そして、これがnew(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 ....

もう1つは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
$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 に答える
0

データを再構築することで、長期にわたって悲しみを和らげることができます-Day列(enum('Mon'、'Tue'、'Wed'、'Thu'、'Fri'、'Sat'、'Sun ')使いやすく読みやすいように)価格が適用される曜日を保持し、クエリは次のようになります(たとえば金曜日の場合):

select price where room_id = 1 and day = 'Fri';

これにより、最初のクエリが簡単になりますが、後でレポートやその他の作業を行う可能性があるため、後続のすべてのクエリも簡単になります。

ショートカットとして、列挙型('Sun'、'Mon'、'Tue'、'Wed'、'Thu'、'Fri'、'Sat')をODBC標準に準拠させる場合は、次を使用できます。

select price where room_id = 1 and day = dayofweek(now());

(列挙型の最初の値の値が1であるため、2番目の値は2であるなど)

于 2013-02-01T15:53:22.950 に答える