Ankündigung

Einklappen
Keine Ankündigung bisher.

[MySQL] Aus komma-separierter Liste um Duplikate bereinigte Liste ausgeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL] Aus komma-separierter Liste um Duplikate bereinigte Liste ausgeben

    Hallo,

    gegeben ist eine Datenbank mit im Duplikat vorliegenden Inhalten. Hier ein Feld mit keywords, die vom Anwender beim Eintragen eines Datensatzes befüllt werden, und komma-separiert in der Datenbank abgelegt werden:

    object_id | object_name | object_keywords

    Die entsprechenden Datensätze sehen dann so aus (Beispieldarstellung, keine echten Daten, Schema allerdings identisch):

    1 | Computer | Windows, Apple Computer, HP
    2 | Installation von Software | Debian, Windows, x32, x64
    3 | Meine Versuche mit php | Debian, Linux Mint, php
    4 | Optimierung meiner Versuche mit php | Debian, Linux Mint, php

    Mein Ziel ist es, ausschließlich die Schlüsselwörter zu filtern, und in einer alphabetischen, komma-separierten Liste ohne Duplikaten auszugeben:

    Apple Computer, Debian, HP, Linux Mint, php, x32, x64

    Möglich ist eine Mischung Die Datenbank füllt sich nur langsam: alle 14 Tage ein Artikel, die Seite ist auf eine Nutzungszeit von 10 Jahren ausgelegt, jeder Artikel beinhaltet zwischen 1 und 4 keywords - allzu heftige Performanceinbußen erwarte ich also auch von kleineren Filter- und Sortieraufgaben via php nicht. Da die betroffene Funktion ohnehin nur im Backend zum Einsatz kommt, erschreckt mich hier auch eine zwangsläufig mit jedem Artikel steigende Ladezeit dieser Liste nicht.

    Meine Versuche beliefen sich bisher ausschließlich direkt auf mysql:

    Im einfachsten Fall sah das so aus:

    SELECT GROUP_CONCAT(DISTINCT object_keywords) AS keywords FROM articles;

    Das mag zwar einer ungefilterten Liste gegenüber ein Gewinn sein, weil ich mir damit im Beispiel oben die Keywords von 3) und 4) zusammenfasse - vor den Duplikaten "Debian" von 2) und 3) schützt es mich allerdings nicht. Auch sortieren scheint hier grundsätzlich nur das Feld "object_keywords" als einen Datensatz zu betrachten.

    Wie würdet ihr die genannte Liste zusammenbauen?

  • #2
    Scheint mir eine typische n:m Beziehung zu sein, d. h. ein Artikel kann mehrere Schlüsselwörter haben und ein Schlüsselwort kann zu mehreren Artikeln gehören. Wenn Du das vernünftig mit SQL auswerten willst, ist Normalisieren angesagt. Das Ergebnis dürfte dann so aussehen:

    Tabelle articles:
    id | object_name

    Tabelle keywords:
    id | keyword

    Tabelle art_keyw stellt die Verbindung zwischen beiden her:
    id | id_article | id_keyword

    Dann hast Du direkt eine Tabelle mit den Schlüsselwörtern und kannst diese mit DISTINCT ohne Dupletten auslesen.

    Alternativ kannst Du natürlich das Ganze mit PHP ausprogrammieren: Die Tabelle auslesen und für jeden Datensatz die Schlüsselwörter mit explode ermitteln und in ein Array eintragen. Dann mit array_unique die Dupletten entfernen. (Oder gleich beim Einfügen prüfen, ob das Wort schon drin ist). Und am Ende sortieren.

    Kommentar


    • #3
      Danke, ich kam mit dem PHP-Weg nun zum gewünschten Ergebnis.

      Kommentar

      homepage-forum.de - Hilfe für Webmaster! Statistiken

      Einklappen

      Themen: 56.897   Beiträge: 430.899   Mitglieder: 28.650   Aktive Mitglieder: 40
      Willkommen an unser neuestes Mitglied, Imhoteph.

      Online-Benutzer

      Einklappen

      195 Benutzer sind jetzt online. Registrierte Benutzer: 3, Gäste: 192.

      Mit 3.502 Benutzern waren am 23.01.2020 um 17:20 die meisten Benutzer gleichzeitig online.

      Die neuesten Themen

      Einklappen

      Die neuesten Beiträge

      Einklappen

      Lädt...
      X