Hallo zusammen Folgende Ausgangslage (MySQL Tabellen): A: [ID] ProduktID 1 ABC123 2 ABC856 B: [ID] PartID Wert NameID 1 1 39.50 1 2 1 blau 2 C: [ID] Name 1 Preis 2 Farbe 3 Grösse A ist die Haupttabelle. B is eine Tabelle mit Parametern und C ist eine Verkünpfung mit Parameternamen. Ich möchte nun daraus einen View machen der in etwa so aussieht: View: ProduktID Farbe Preis ABC123 blau 39.50 ABC856 <leer> <leer> Besonderheiten: im view, sollten die Spaltennamen dynamisch mit dem Wert aus der Tabelle C beschriftet werden. Die an ein Produkt angehängten Parameter sollen wenn möglich dynamisch hinzu bzw. entfernt werden können. Damit meine ich, dass die View immer so viele Spalten, welche ja den Parametern entsprechen, darstellt wie möglich. Die Frage ist, wie macht man sowas? Ich hoffe ich habe den Zusammenhang gut genug beschrieben. Danke schonmal
Holger K. schrieb: > Die Frage ist, wie macht man sowas? gar nicht. Zumindest geht es nicht mit einen View. Über eine SQL-Prozedur oder Funktion ist das eventuell möglich.
Im Prizo geht das schon, aber du lagerst dann sehr, sehr viel Logik in die DB aus. Vor allem ist das Logik die da gar nicht wirklich passt und man die DB schon sehr verbiegen muss, damit das klappt. Warum packst du sowas nicht in deine Anwendung statt die arme DB?
dein problem ist die strukturierung der daten. die daten müssen in ein modell verpackt werden, welches dem relationalen modell entspricht. was du vorhast ist gegen die regeln. es ist aber machbar wenn man umstrukturiert. da bräuchte ich zumindest ein paar mehr beispiele wie es am ende aussehen soll. views dienen eigentlich nur der sicherheit. jeder betrachter bekommt seine view entsprechend seiner befugnisse.
Dr. Google schrieb: > views dienen eigentlich nur der sicherheit. jeder betrachter bekommt > seine view entsprechend seiner befugnisse. nein, sie können für viel mehr verwendet werden. Wenn man an mehren stellen immer die gleichen joins verwenden und auch noch Logik bei der Spaltenberechnung hat, kann man das sehr schön in einen View auslagern. Dazu kommt noch die Optimierung das es auch Idizierte-Views gibt.
Peter II schrieb: >views... nein, sie können für viel mehr verwendet werden. natürlich ist das möglich, es gibt aber keinen unterschied zu einem join also ich habe den fragesteller schon verstanden, ich will ihn nur nicht verstehen... es geht darum die tabellenüberschrift dynamisch anzuzeigen. wenn man die aber weglassen würde und sie irgendwie anders ausgibt.
Die dynamische Benennung der Spalten wäre mit einem ETL Tool gut machbar. Das Ergebnis bliebe aber eine Tabelle mit einer konstanten Spaltenzahl.
so viel ich davon verstanden habe ist es grundsätzlich möglich. es soll leute geben, die das mathematisch beweisen können. schlimmstenfalls braucht man zu dem zweck einen oder mehrere künstliche schlüssel. die entwicklungsleistung soll man nicht unterschätzen, dafür läuft es aber dann maximal schnell.
Tabelle A ID Produkt Tabelle B1 ID Farbe Tabelle B2 ID Preis Tabelle B3 ID Groesse select a.produkt , b1.farbe ..... from a left join b1 on a.id = b1.id left join b2 on a.id ... Stefan
@Stefan: Hilft nicht, dann muss er ja jedesmal wenn ein neuer Parameter (z.B. "Gewicht") dazukommt, eine neue Tabelle anlegen und die View/Query anpassen. Der TE will aber, wenn ich es richtig deute, dass, sobald das erste Produkt mit einem "Gewicht" versehen ist, dieses automatisch, ohne weitere DDL-Befehle, als neue Spalte in seiner View auftaucht. Wenn eine Lösung mit DDL erlaubt wäre, dann "alter table ... add column gewicht..." aber sowas wäre ja viel zu einfach und normal. @Holger: Mal überlegt, einfach ein JSON/Array/XML/.. Zusatzdatenfeld im Produkt anzulegen, und diese produkt(gruppen)spezifischen Werte darin auszulagern?
:
Bearbeitet durch User
Fred schrieb: > Stichwort Pivot Tabelle > http://modern-sql.com/de/anwendung/pivot bist du sicher, das man damit aus dem Inhalt einer Tabelle den Spaltennamen dynamisch bilden kann?
Ja schon, ich bin nur nicht fit in mysql. Habe es für tsql immer mit xml path gemacht. http://www.sqlshack.com/multiple-options-to-transposing-rows-into-columns/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.