ich habe folgende Herausforderung:
Beim letzten Umzug habe ich die Sortierung meiner physischen Tonträger geändert:
Vorher: „INTERPRET_GRUPPE“ > VÖ > Titel (des Albums)
Nachher: „Nachname“ > „Vorname“ > „VÖ“ > Titel
In meiner Musikdatenbank habe ich eine Tabelle „INTERPRETEN _ GRUPPEN“ mit 3 Feldern: „INTERPRET_GRUPPE“, URL des Künstlers und „GESCHICHTE“
Für die oben beschriebene Aufgabe habe ich mir folgende Lösung überlegt:
In der Tabelle „INTERPRETEN _ GRUPPEN“ zusätzliche Felder „Vorname“, „Nachname“ und „Künstler“
Die beiden Felder „Vorname“ und „Nachname“ habe ich per „UPDATE“ mit Inhalten gefüllt und auch eine Formel gefunden mit der ich das Feld „Künstler“ füllen kann.
Dabei bin ich auf das folgende Problem gestoßen: Das Feld „Künstler“ erhält das was ich für Einzelne Künstler haben möchte nämlich „Vorname Nachname“ (Beispiel: „Phil Collins).
So weit so gut. Bei Bandnamen bekomme ich aber diesen doppelt (Beispiel: Genesis Genesis)
Also habe ich 2 Lösungen ausprobiert:
Über eine „UNION“-Abfrage 2 Abfragen zu verbinden:
in der 1. Abfrage für einzelne Interpreten (z. B. „Phil Collins)
in der 2. auf das Feld „Nachname“ so das Ergebnis eben der Bandname ist (z. B. „Genesis“)
Dazu habe ich folgende Abfragen erstellt, leide alle ohne positives Ergebnis:
Code: Alles auswählen
Variante 1.1
SELECT `I`.`INTERPRET_GRUPPE` AS `INTERPRET_GRUPPE`, `I`.`Vorname` AS `Vorname`, `I`.`Nachname` AS `Nachname`, `I`.`Nachname` AS `Künstler`
FROM
(
(SELECT `I`.`INTERPRET_GRUPPE`, `I`.`Vorname`, `I`.`Nachname` AS Nachname , CONCAT( `I`.`.`Vorname`, ' ', `I`..`Nachname` ) AS `Künstler`
FROM `INTERPRETEN _ GRUPPEN` AS `I`
WHERE `Vorname` != `INTERPRETEN _ GRUPPEN`.`Nachname`)
UNION ALL
(SELECT `I`.`INTERPRET_GRUPPE`, AS `Vorname`, `I`.`Nachname` AS `Nachname`, `I`.`Nachname` AS `Künstler`
FROM `INTERPRETEN _ GRUPPEN` AS `I`
WHERE `Vorname` = `INTERPRETEN _ GRUPPEN`.`Nachname`)
)
GROUP BY `I`
ORDER BY `Vorname`
Variante 1.2
SELECT `Vorname`, `Nachname`,`Künstler`
FROM
((SELECT `INTERPRET_GRUPPE`,`Vorname`, `Nachname`, CONCAT( `Vorname`, ' ', `Nachname` ) AS `Künstler` FROM `Musik`.`INTERPRETEN _ GRUPPEN` AS `INTERPRETEN _ GRUPPEN` where `Vorname` != `Nachname`
GROUP BY `Künstler`)
UNION ALL
(SELECT `INTERPRET_GRUPPE`,`Vorname`, `Nachname`, `Nachname` AS `Künstler` FROM `Musik`.`INTERPRETEN _ GRUPPEN` AS `INTERPRETEN _ GRUPPEN` WHERE `Vorname` != `Nachname` GROUP BY `Künstler`))
GROUP BY `Künstler`
ORDER BY `Vorname`, `Nachname`
Variante 1.3
SELECT `I-G`.`INTERPRET_GRUPPE`, `I-G`.`Vorname`, `I-G`.`Nachname`, `I-G`.`K`
FROM
(SELECT `I-G`.`INTERPRET_GRUPPE`, `I-G`.`Vorname`, `I-G`.`Nachname`, CONCAT(`I-G`..`Vorname`, ' ', `I-G`.`Nachname` ) AS `I-G`.`K`
FROM `INTERPRETEN _ GRUPPEN` AS `I-G`
WHERE `I-G`.`Vorname` != `I-G`.`Nachname` GROUP BY `I-G`.`K` ORDER BY `K`)
UNION ALL
(SELECT `I-G`.`INTERPRET_GRUPPE`, `I-G`.`Vorname`, `I-G`.`Nachname`,`I-G`.`Nachname` AS `I-G`.`K`
FROM `INTERPRETEN _ GRUPPEN` AS `I-G`
WHERE `I-G`.`Vorname` != `I-G`.`Nachname` GROUP BY `I-G`.`K` ORDER BY `K`)
Als weiteren Weg habe ich da Feld „Vorname“ für alle Bands/Gruppen gelöscht ( in der DB über den Browser, nicht über Libreoffice-Base funktioniert hat) und die Abfrage die für Einzelkünstler auf alle Datensätze ausgeweitet mit folgender Formel, welche die Felder „Vorname“ und „Nachname “ zusammenfasst (z. B. „Phil Collins):
Code: Alles auswählen
Variante 2.1
CONCAT( `INTERPRETEN _ GRUPPEN`.`Vorname`, ' ', `INTERPRETEN _ GRUPPEN`.`Nachname` ) AS `Künstler` FROM `INTERPRETEN _ GRUPPEN`
Der ganze Krempel läuft auf einem Intel-NUC mit Debian 10 in 2 PROXMOX-VM ebenfalls mit Debian 10, eine mit dem WEB-Server unter Apache2 und eine für MariaDB.
Gruß und vielen Dank im Voraus
Christian