2017-06-07 7 views
0

Ich habe eine Tabelle:mysql dynamische Spalte basierend auf Wochentag

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 
  • Wo 0-6 - Wochentag (von Montag bis Sonntag);

Wie ich Zeilen auswählen:

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

Wenn heute Mittwoch (Index: 2)?

Antwort

0

Ihre SQL-Struktur ist extrem aus.

Normalerweise würde man eine Tabelle wie folgt erstellen:

id, open, close, weekday 

und Sie wäre in der Lage, es zu fragen, wie diese

SELECT open, close WHERE weekday = DAYOFWEEK() 

Ich denke, man kann es nicht ändern, so sind Sie stecken mit Ihrem aktuelle Tabelle.

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

Es ist etwas, das Sie haben zu handhaben in der Business-Schicht der Anwendung (dh vielleicht eine Funktion in der Middleware/Back-End-Schicht, die ein Datum als Argument verwendet und Spaltennamen: Sie können Ihre Informationen wie diese abfragen).

Wenn Sie über die Funktionen sprechen, können Sie auch eine function in MySQL schreiben, die ein Datum nimmt und zwei Werte zurückgibt, die in der obigen Abfrage verwendet werden können. Sie können die DAYOFWEEK() Bibliotheksfunktion von MySQL verwenden, um die Spaltennamen zu bestimmen.

Verwandte Themen