Forum: PC-Programmierung SQL mehrere Zeilen in eine


von Holger K. (holgerkraehe)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von waflija (Gast)


Lesenswert?

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?

von Dr. Google (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Dr. Google (Gast)


Lesenswert?

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.

von Etlfuzzi (Gast)


Lesenswert?

Die dynamische Benennung der Spalten wäre mit einem ETL Tool gut 
machbar. Das Ergebnis bliebe aber eine Tabelle mit einer konstanten 
Spaltenzahl.

von Dr. Google (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

@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
von Fred (Gast)


Lesenswert?


von Peter II (Gast)


Lesenswert?

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?

von Fred (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.