Rolf B: MySQL: Stichwörter gruppiert mit allen Vorkommen anzeigen

Beitrag lesen

Hallo Yadgar,

Wie bekomme ich es hin, dass jedes Stichwort mit allen Vorkommen (diese dann idealerweise wieder nach Datum aufsteigend geordnet) angezeigt wird?

Beachte: DB-Abfrage und Anzeige der Daten sind normalerweise zwei paar Schuhe. Du kannst Dir vom DB Server natürlich helfen lassen, deine Anzeige vorzubereiten, aber immer geht das nicht.

Es kommt auch darauf an, wie deine Anzeige aussehen soll. Es kann eine Liste sein, wo pro Stichwort und Datum jeweils eine neue Zeile erstellt wird. Oder eine Liste, wo hinter dem Stichwort in einer Zeile die benutzten Datumswerte stehen.

Nach der reinen Lehre ist nur die erste Variante etwas, wonach man einen Datenbankserver fragen sollte. Die Aufbereitung für die Anzeige, wie das Sammeln von Werten in einer Zeile, ist Sache der Anwendung. Ein Server, der etwas auf sich hält, rümpft darüber die Nase.

Aber MYSQL ist Kummer gewohnt und bietet mit GROUP_CONCAT Hilfe. Oracle bietet LISTAGG, und sogar die Hochnasen von Microsoft haben im SQL Server 2017 die STRING_AGG Funktion hinzugefügt.

Also - eine rein relationale Antwort gibt's so, ohne GROUP BY.

SELECT st.stichwort, sd.datum
FROM STICHWOERTER st, STICHWORT_DATUM sd
WHERE sd.stichwoerter_nr = st.NR
ORDER BY st.stichwort, sd.datum

Ich habe den Tabellen Aliasnamen gegeben (st und sd), damit die Präfixe vor den Spaltennamen kürzer sind.

Eine Sammlung der Datümer auf einer Zeile braucht entweder eine Aufbereitung der Anzeige mit PHP, oder im SQL ein Konstrukt aus GROUP BY und GROUP_CONCAT (guckst Du hier für Doku und Beispiele).

Mit SQL bekommst Du aber nur eine einfache Komma-Auflistung. Wenn Du die Ausgabe mit HTML formatieren willst, bist Du mit einer PHP Aufbereitung vermutlich besser dran.

Rolf

--
sumpsi - posui - obstruxi