J'ai une table de données, et j'autorise les gens à ajouter des méta-données à cette table. Je leur donne une interface qui leur permet de traiter comme s'ils ajoutaient des colonnes supplémentaires à la table dans laquelle leurs données sont stockées, mais je stocke les données dans une autre table.Quelle requête SQL affichera "colonnes dynamiques"
Data Table
DataID
Data
Meta Table
DataID
MetaName
MetaData
Donc, s'ils voulaient une table qui a stocké les données, la date et un nom, alors j'aurais les données dans le tableau de données, et le mot « Date » dans metaname, et la date à MetaData, et une autre ligne dans la table meta avec "Name" dans le méta-nom et le nom dans les métadonnées.
J'ai maintenant besoin d'une requête qui prend l'information de ces tables et la présente comme si elle provenait d'une seule table avec les deux colonnes supplémentaires "Données" et "Nom" donc pour le client il semblerait qu'il y ait une seule table avec leurs colonnes personnalisées:
MyTable
Data
Date
Name
Ou, autrement dit, comment puis-je aller d'ici:
Data Table
DataID Data
1 Testing!
2 Hello, World!
Meta Table
DataID MetaName MetaData
1 Date 20081020
1 Name adavis
2 Date 20081019
2 Name mdavis
Pour ici:
MyTable
Data Date Name
Testing! 20081020 adavis
Hello, World! 20081019 mdavis
Il y a quelques années lorsque j'ai fait cela en MySQL en utilisant PHP, j'ai fait deux requêtes, la première pour obtenir les méta-données supplémentaires, la seconde pour les rejoindre toutes ensemble. J'espère que les bases de données modernes ont d'autres méthodes pour y faire face.
Lié à l'option 3 de this question.
-Adam
Plus sur CASE le pied de biche de SQL. http://www.4guysfromrolla.com/webtech/102704-1.shtml –
Quelle est la meilleure façon d'interroger le résultat? Exemple: 'SELECT * FROM Table WHERE Name = 'Joe Test' Aurais-je besoin de sauvegarder les premiers résultats et interroger cette table? Ou y a-t-il un moyen d'implémenter un filtre "WHERE" dans le premier passage? – 182764125216