Désolé pour la longueur de détail requise pour poser la question.Utilisation de JOIN (?) Pour retourner intentionnellement plus de résultats que de lignes
Il y a quatre tables (liées à la recherche, n'ayant pas vraiment de rapport avec une installation sportive). Ils sont comme suit:
1) Disons que la première table est une liste de courts de tennis, et disons qu'il y a des centaines de possibilités (pas seulement intérieures et extérieures).
-------------
TENNIS_COURTS
ID Type
-------------
1 Indoor
2 Outdoor
…
2) Nous voulons savoir quel jour de l'année ils sont disponibles à la location. Pour éviter les lignes redondantes, nous pouvons énumérer des jours individuels (par exemple, seulement le 2ème jour de l'année, entré comme "De: 2", "À: 2") ou des blocs (par exemple, du 24ème jour au 25ème jour, entré comme "De: 24", "À: 25"). Dans cet exemple, le terrain intérieur est le plus disponible alors que le terrain extérieur n'a que deux plages de dates (évidemment irréalistes pour l'hiver).
---------------------------
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) Nous voulons également ajouter une liste d'attributs qui vont grandir au fil du temps. Donc, plutôt que de les incorporer dans une règle de champ, il y a une table d'attributs.
-----------------------
ATTRIBUTES
ID Attribute
-----------------------
1 Age of Player
2 Time of Day
3 Outside Temperature
…
4) Enfin, nous voulons ajouter une liste des considérations (ou facteurs) à considérer lors de la location d'un tribunal. Dans cet exemple, le risque de blessure s'applique aux courts intérieurs et extérieurs, mais la visibilité et la température ne s'appliquent qu'à l'extérieur.
--------------------------------------------------
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
…
En utilisant les tables individuelles ci-dessus, nous aimerions créer une vue enregistrée consolidée qui contient au moins une ligne pour chaque date de la plage, à partir du premier jour de l'année (dans laquelle un tribunal est disponible) jusqu'au dernier jour de l'année (pour lequel un tribunal est disponible). Nous voulons également répéter les considérations applicables pour chaque jour indiqué.
Sur la base des données présentées ci-dessus, il ressemblerait à ceci:
----------------------------------------
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
…
On peut alors interroger la vue d'ensemble (par exemple, « SELECT * FROM CONSOLIDATED_VIEW où jour = 24 ») pour produire une sortie simple, comme:
Court: Indoor
Available: 24th day
Note: Risk of injury (www…)
Hard to see (www…)
Gets cold (www…)
nous voulons produire l'exemple ci-dessus à partir d'une vue consolidée car une fois que les données sont stockées, il ne changera pas souvent, et nous très probablement ne sera pas interrogation jours unique à un moment de toute façon . Il est plus probable qu'un client Web récupère toutes les lignes dans un grand tableau (à déterminer en fonction de la taille totale) et les présente ensuite aux utilisateurs sans autre interaction avec le serveur.
Pouvons-nous produire le CONSLIDATED_TABLE uniquement avec une requête SQL ou devons-nous effectuer un autre codage (par exemple, PHP ou NodeJS)?