2017-03-07 2 views
0

Entschuldigung für die Länge der Details erforderlich, um die Frage zu stellen.Verwenden Sie JOIN (?), Um absichtlich mehr Ergebnisse als Zeilen zurückzugeben

Es gibt vier Tabellen (im Zusammenhang mit Forschung, nicht wirklich etwas mit einer Sportanlage zu tun haben). Sie sind wie folgt:

1) Lassen Sie uns sagen, die erste Tabelle ist eine Liste von Tennisplätzen, und lassen Sie uns sagen, es gibt Hunderte von Möglichkeiten (nicht nur drinnen und draußen).

------------- 
TENNIS_COURTS 
ID Type 
------------- 
1 Indoor 
2 Outdoor 
… 

2) Wir möchten feststellen, an welchem ​​Tag des Jahres sie vermietet werden können. Um redundante Zeilen zu vermeiden, können Sie einzelne Tage (zB nur den 2. Tag des Jahres, eingegeben als "Von: 2", "Bis: 2") oder Blöcke (zB vom 24. Tag bis zum 25. Tag) eingeben als "Von: 24", "An: 25"). In diesem Beispiel ist das Indoor-Gericht am meisten verfügbar, während das Outdoor-Gericht nur zwei Datumsbereiche hat (offensichtlich unrealistisch für den Winter).

--------------------------- 
     DAYS_AVAILABLE 
ID ProductID From To 
--------------------------- 
1  1   2  2 《 Indoor 
2  2  24  25 《 Outdoor 
3  2  140 170 《 Outdoor 
4  1  280 300 《 Indoor 
5  1  340 345 《 Indoor 
… 

3) Wir wollen auch eine Liste von Attributen hinzufügen, die im Laufe der Zeit ziemlich lange wachsen werden. Anstatt diese in eine Feldregel zu integrieren, gibt es eine Attributtabelle.

4) Schließlich möchten wir eine Liste von Überlegungen (oder Faktoren) hinzufügen, die bei der Vermietung eines Gerichts zu berücksichtigen sind. In diesem Beispiel gilt Verletzungsgefahr für Innen- und Außenplätze, aber Sichtbarkeit und Temperatur gelten nur für den Außenbereich.

-------------------------------------------------- 
        CONSIDERATIONS 
ID ProductID AttributeID Effect   Link 
-------------------------------------------------- 
1  1   1  Risk of injury www… 《 Indoor 
2  2   1  Risk of injury www… 《 Outdoor 
3  2   2  Hard to see  www… 《 Outdoor 
4  2   3  Gets cold  www… 《 Outdoor 
… 

Unter Verwendung der einzelnen Tabellen oben möchten wir eine konsolidierte gespeicherte Ansicht erstellen, die im Bereich mindestens eine Zeile für jeden Tag enthält, ab dem ersten Tag des Jahres beginnen (in dem ein Gericht verfügbar) bis zum letzten Tag des Jahres (für den ein Gericht verfügbar ist). Wir möchten auch die anwendbaren Überlegungen für jeden aufgelisteten Tag wiederholen.

Basierend auf den obigen Daten gezeigt, es würde wie folgt aussehen:

---------------------------------------- 
      CONSOLIDATED VIEW 
Day  Court  Consideration  Link 
---------------------------------------- 
2  Indoor       《 from DAYS_AVAILABLE 
2  Indoor Risk of injury www… 《 from CONSIDERATIONS 
24  Outdoor       《 from DAYS_AVAILABLE 
24  Outdoor Risk of injury www… 《 from CONSIDERATIONS 
24  Outdoor Hard to see  www… 《 from CONSIDERATIONS 
24  Outdoor Gets cold   www… 《 from CONSIDERATIONS 
25  Outdoor       《 from DAYS_AVAILABLE 
25  Outdoor Risk of injury www… 《 from CONSIDERATIONS 
25  Outdoor Hard to see  www… 《 from CONSIDERATIONS 
25  Outdoor Gets cold   www… 《 from CONSIDERATIONS 
… 

wir die konsolidierte Ansicht abfragen können dann (zB „SELECT * FROM CONSOLIDATED_VIEW wo Tag = 24“) eine einfache Ausgabe zu erzeugen wie:

Court: Indoor 
Available: 24th day 
    Note: Risk of injury (www…) 
      Hard to see (www…) 
      Gets cold (www…) 

wir wollen das oben gezeigte Beispiel von einer konsolidierten Ansicht erzeugen, weil, sobald die Daten gespeichert sind, ist es nicht häufig wechselnden werden, und wir werden sehr wahrscheinlich nicht einzelne Tage zu einer Zeit sowieso werden abfragt . Es ist wahrscheinlicher, dass ein Webclient alle Zeilen in einem großen Array abruft (TBD basierend auf der Bestimmung der Gesamtgröße) und diese dann Benutzern ohne weitere Serverinteraktion präsentiert.

Können wir die CONSLIDATED_TABLE ausschließlich mit einer SQL-Abfrage erzeugen oder müssen wir eine andere Codierung durchführen (z. B. PHP oder NodeJS)?

Antwort

1

Der wirkliche Deal in Ihrer Frage ist: Wie kann ich eine Liste der verfügbaren Tage bekommen, so dass ich meine anderen Tabellen beitreten und meine Ausgabe produzieren kann, richtig? Ich meine, mit einer Liste von Tagen, alles, was Sie brauchen, ist die anderen Tabellen JOIN.

Da Sie eine begrenzte Liste (Tage des Jahres) haben, würde ich vorschlagen, erstellen Sie eine Tabelle mit einer einzigen Spalte mit den 365 (oder 366) Tagen (1, 2, 3, ...) und JOIN es mit deinen anderen Tischen. Die Abfrage wäre ähnlich wie:

Verwandte Themen