Hallo,
ich bin neu hier und habe eine Frage zu MYSQL Tabellen, die miteinander verknüpft werden sollen.
Tabelle 1: kasjos_joomgallery
Spalten: id, imgtitle, imgauthor, imgtext, hidden where hidden = 0
Beispiel:
id, imgtitle, imgauthor, imgtext, hidden
1, Art A, Autor A, Text A, 0
2, Art B, Autor B, Text B, 0
3, Art A, Autor A, Text A, 0
4, Art C, Autor C, Text C, 1
5, Art D, Autor D, Text D, 0
6, Art E, Autor E, Text E, 0
7, Art A, Autor A, Text A, 0
....
Id 4 soll aus der Ursprungstabelle nicht mit berücksichtigt werden, hidden = 1).
Tabelle 2: kasjos_joomgallery_image_details
Spalten: id, details_key, details_value
Die Tabelle 2 ist so aufgebaut:
id, details_key, details_value
1, additional.Breite_min, 12.5
1, additional.Breite_max, 15.5
1, additional.Länge_min, 22.5
1, additional.Länge_max, 35.5
1, additional.Streifen_min, 3
1, additional.Streifen_max, 5
1, additional.fibulae, 7
.... (weitere additional.fields)
2, additional.Breite_min, 2.5
2, additional.Breite_max, 5.5
2, additional.Länge_min, 12.5
2, additional.Länge_max, 25.5
2, additional.Streifen_min, 4
2, additional.Streifen_max, 6
2, additional.fibulae, 9
.....(weitere additional.fields)
3, additional.Breite_min, 6.5
3, additional.Breite_max, 8.5
3, additional.Länge_min, 32.5
3, additional.Länge_max, 45.5
3, additional.Streifen_min, 7
3, additional.Streifen_max, 9
3, additional.fibulae, 5
....(weitere additional.fields)
4
5
6
7
usw.
.... = es gibt noch weitere detail_keys Zeilen mit anderen Werten als details_values
Diese beiden Tabellen sind über die Id miteinander verbunden.
Ich hätte nun gerne zwei unterscheidliche Tabellen aus den Inhalten der beiden, die so aussehen sollten:
Tabelle Resultat A
Id, imgtitle, imgauthor, imgtext, hidden, additional.Breite_min, additional.Breite_max, additional.Länge_min, additional.Länge_max, additional.Streifen_min, additional.Streifen_max, additional.fibulae....(weitere detail_values)
1, Art A, Autor A, Text A, 0, 12.5, 15.5, 22.5, 35.5, 3, 5, 7 ...
2, Art B, Autor B, Text B, 0, 2.5, 5.5, 12.5, 25.5, 4, 6, 9 ...
3, Art A, Autor A, Text C, 0, 6.5, 8.5, 32.5, 45.5, 7, 9, 5 ...
....
Da ein und dieselbe Art mehrfach vorkommen kann (siehe Id 1, Id 3 und Id7) wäre eine Tabelle sinnvoll(er) in der Spalten zusammengefasst werden. In den Spalten imgtitle, imgauthor, imgtext, hidden steht bei identischen Arten identische Information, während in den anderen Feldern unterschiedliche Informationen enthalten sein können. Es handelt sich dabei um Zahlenwerte z.B. "additional.Breite_min - additional.Breite_max", additional.Länge_min - additional.Länge_max", additional.Streifen_min - additional.Streifen_max". Diese müssten zu einer Spalte mit dem kleinsten Wert von allen Werten der Spalte für ein und dieselbe Art und dem größten Wert von allen Werten der Spalte für ein und dieselbe Art zusammenfasst werden.
Tabelle Resultat B
Id, imgtitle, imgauthor, imgtext, hidden, "additional.Breite_min - additional.Breite_max", additional.Länge_min - additional.Länge_max", additional.Streifen_min - additional.Streifen_max", additional_fibulae....
1, Art A, Autor A, Text A, 0, 6.5 - 15.5, 22.5 - 45.5, 3 - 9, 5 - 7...
2, Art B, Autor B, Text B, 0, 2.5 - 5.5, 12.5 - 25.5, 4 - 6, 9 ...
5, Art D, Autor D, Text D, 0, ....
Das bedeutet in Tabelle B sind zwei Felder dann als ein Feld zusammengefasst (wie Länge min und max oder Breite min und max).
Nicht in jedem Feld der Tabelle 2 sind auch Werte enthalten, manchmal stehen nur im max Feld etwas, dann sollte in Tabelle Resultat B nur der eine Wert stehen ohne einen Bindestrich.
Ist so etwas über SELECT group_concat möglich?
Vielen Dank und Grüße
Ankündigung
Einklappen
Keine Ankündigung bisher.
Tabellen miteinander verknüpfen MYSQL
Einklappen
Neue Werbung 2019
Einklappen
X
-
Tabellen miteinander verknüpfen MYSQL
Stichworte: -
-
Zitat von akretschmer Beitrag anzeigenNein, aber via JOIN, und für die Range-Angaben via passender Range-Datentypen.
Code:test=*# select * from master; id | name ----+------- 1 | bild1 2 | bild2 (2 rows) Time: 0,229 ms test=*# select * from detail; m_id | key | val ------+------------+----- 1 | breite_von | 10 1 | breite_bis | 20 1 | laenge_von | 15 1 | laenge_bis | 25 (4 rows) Time: 0,200 ms test=*# select m.name, int4range(d1.val, d2.val) as breite from master m left join detail d1 on m.id=d1.m_id and d1.key='breite_von' left join detail d2 on m.id=d2.m_id and d2.key='breite_bis'; name | breite -------+--------- bild1 | [10,20) bild2 | (,) (2 rows)
-
Zitat von MaggiW Beitrag anzeigenIst so etwas über SELECT group_concat möglich?
Vielen Dank und Grüße
Einen Kommentar schreiben:
Einen Kommentar schreiben: