Tags programmieren

  • Ich bin zu einem Punkt gekommen, wo ich mich fragen muss, wie man am besten ein Tag-System umsetzt. Tags gibt es immer dann, wenn man was in Kategorien packen will. Mir ist aufgefallen, dass sowas ziemlich viel Arbeit ist.


    Gerade wenn man z.B. eine unbegrenzte Anzahl an Tags ermöglichen möchte, kann es knifflig werden. Aber auch schon mit einer begrenzten Anzahl an Tags wird es schwierig. Wo speichert man diese am besten? Wie speichert man die? Wie kann man Tags anzeigen lassen, ohne viel Code schreiben zu müssen?


    In meinem Speziellen Fall habe ich die Tag Grenze auf 4 festgelegt, und frage mich nun, wie man sowas am besten umsetzt, ohne die Datenbank zuzumüllen, und ohne viel Aufwand im Code aufbringen zu müssen? Und Vor Allem, so, dass sich das System auch einfach von 4 auf z.B 8, oder sogar mehr Tags umstellen lässt.

  • In meinem Speziellen Fall habe ich die Tag Grenze auf 4 festgelegt, und frage mich nun, wie man sowas am besten umsetzt, ohne die Datenbank zuzumüllen, und ohne viel Aufwand im Code aufbringen zu müssen? Und Vor Allem, so, dass sich das System auch einfach von 4 auf z.B 8, oder sogar mehr Tags umstellen lässt.

    Normalisierung einhalten und schon ist die Erweiterungsfrage passé.

    Für den Rest wäre interessant zu erfahren, was Du bisher angestellt hast, bzw. wie Deine Vorstellungen im Detail aussehen?

  • Ich habe eine Tabelle mit einem Datensatz, eine zweite mit Nutzern, die diese Datensätz erstellen können. Um die Daten eben filtern zu können, soll es Tags geben. Nach diesen kann man suchen, oder eben auf die jeweilige Kategorie im Kategorieen Reiter klicken. Das ganze so ungefähr wie auf Gutefrage.net, falls Du das kennst. Dort kann man Nach Tags suchen, beliebte Tags werden angezeigt und man kann seiner Frage selbst eine bestimmte Anzahl an Tags hinzufügen.


    Ich selbst habe 4 Tag-Felder, die alle vom User ausgefüllt werden müssen.


    Dazu nutze ich PHP mit MySQL in Verbindung mit PDO, nur mal so am Rande.


    PS: Was ist, bzw. was meinst Du mit Noramlisierung?

  • Also mal als Beispiel, wie Du es gerade aufgegriffen hast, wird das tagging in der Art genutzt, dass die tags an die Beiträge gebunden werden.

    Und da kommt auch schon die Normalisierung ins Spiel. Wenn Du bspw. mehrer Beiträge mit den selben Tags hast und die Tags ( angenommen ) als Spalten an die Beitragsdatensätze hängst, hast Du viele Dopplungen innerhalb der Spalten, deshalb bricht man das in einzelne Tabellen.


    Beispiel:

    Du hast eine Tabelle posts und erstellst dazu die Tabelle tags, in der alle bisher eingegeben Tags enthalten sind.

    Jetzt kommt eine dritte Tabelle ins Spiel, die pro post:tag Beziehung einen Datensatz enthält.


    Durch die eigene tags-Tabelle ist es egal, wie viele unterschiedliche Tags es gibt. Die Daten werden über die dritte Tabelle zusammengeführt.

  • Um es mal klein und verständlich zu halten:


    Tabelle posts

    Id, Title, Content


    Tabelle tags

    Id, TagName


    Tabelle posts_tags

    Id, IdPost, IdTag



    Nehmen wir an, Du hast folgende Tags:

    Id TagName
    1 HTML5
    2 CSS3
    3 JavaScript


    Und bspw. einen Post mit der Id 1

    nehmen wir jetzt an, Du taggst diesen Post mit HTML5 und JavaScript, dann hast Du in der Tabelle posts_tags folgende Einträge:

    Id IdPost IdTag
    1 1 1
    2 1 3



    Das ist ein Weg der Normalisierung. Damit hast Du die Möglichkeit der Erweiterung offen gehalten und kannst per JOINs Deine Datensätze sammeln.

    Wenn Du meinetwegen alle Posts mit dem Tag JavaScript haben willst, sähe das in etwa so aus:


    Nagel mich nicht fest, ist jetzt nur aus'm Ärmel, aber so in etwa solltest Du das korrekte Ergebnis erhalten.