2017-06-07 14 views
0

に基づく:mysqlの動的な列は、私はテーブルを持っている平日

id 0_open 0_close 1_open 1_close 2_open 2_close 3_open 3_close 4_open 4_close 5_open 5_close 6_open 6_close 

1 07:00 18:00 07:00 18:00 07:00 18:00 07:00 18:00 07:00 18:00 07:00 18:00 07:00 18:00 
  • どこ0-6 - 平日(月曜から日曜まで)。今日は水曜日である場合

    SELECT * FROM table WHERE TIME(NOW()) BETWEEN 2_open AND 2_close 
    

はどうやって行を選択することができます(インデックス:2)?

答えて

0

あなたのSQL構造は極端にオフです。

通常1は、このようにテーブルを作成します。

id, open, close, weekday 

、あなたは私はあなたがそれを変更することはできません推測し、この

SELECT open, close WHERE weekday = DAYOFWEEK() 

のようにそれを照会することができるだろう、そうあなたが立ち往生しているあなた現在のテーブル。あなたはこのようなあなたの情報を照会することができます

SELECT 0_open, 0_close FROM table WHEN DAYOFWEEK() = 0 
UNION 
SELECT 1_open, 1_close FROM table WHEN DAYOFWEEK() = 1 
UNION 
SELECT 2_open, 2_close FROM table WHEN DAYOFWEEK() = 2 
UNION 
SELECT 3_open, 3_close FROM table WHEN DAYOFWEEK() = 3 
UNION 
SELECT 4_open, 4_close FROM table WHEN DAYOFWEEK() = 4 
UNION 
SELECT 5_open, 5_close FROM table WHEN DAYOFWEEK() = 5 
UNION 
SELECT 6_open, 6_close FROM table WHEN DAYOFWEEK() = 6 
0

それはあなたのアプリケーションのビジネス層で処理する必要が何か(すなわち多分引数として日付を受け取り、列名を返しミドルウェア/バックエンド層内の関数)。

関数については、にfunctionと書いて、日付をとり、上記のクエリで使用できる2つの値を返すこともできます。 DAYOFWEEK()ライブラリ関数MySQLを使用して列名を決定することができます。

関連する問題