Ich habe Artikel auf meiner Website, und ich möchte Tags hinzufügen, die jeden Artikel beschreiben würden, aber ich habe Probleme mit der Design-Tabelle mysql für Tags. Ich habe zwei Ideen:
Wenn ich also Tags für Artikel mit ID 1 haben möchte, würde ich
ausführen %Vor%Aber ich würde auch gerne 3 ähnlichste Artikel durch den Vergleich von Tags kennen, also wenn ich einen Artikel mit Tags "php, mysql, erlang" und 5 Artikel mit Tags habe: "php, mysql", "erlang, ruby "," php erlang "," mysql, erlang, javascript ", würde ich 1., 3. und 4. wählen, da diese 3 die gleichen Tags mit dem Hauptartikel haben.
Auch andere Frage, was ist der beste Weg, um 10 "am häufigsten verwendeten Tags" zu bekommen?
Im Allgemeinen gibt es für diese Art von Viele-zu-Viele-Beziehung drei Tabellen:
article
"
tag
"
tags_articles
", die als Join-Tabelle fungiert und nur Folgendes enthält:
id_article
: Fremdschlüssel, der auf einen Artikel id_tag
: Fremdschlüssel, der auf ein Tag
Auf diese Weise werden die Daten eines Tags nicht dupliziert. Für jedes Tag gibt es eine und nur eine Zeile in der Tabelle tag
.
Und für jeden Artikel können Sie mehrere Tags haben (d. h. mehrere Zeilen in der Tabelle tags_articles
); und natürlich können Sie für jede Tags mehrere Artikel haben.
Eine Liste von Tags für einen Artikel mit dieser Idee zu erhalten, ist eine Frage von einer zusätzlichen Abfrage, wie:
%Vor%
Die drei "ähnlichsten" Artikel zu erhalten, würde bedeuten:
Nicht getestet, aber eine Idee könnte etwas sein, das so aussehen würde:
%Vor%Grundsätzlich, Sie:
where
-Klausel entsprechen, ohne die group by
-Klausel, gäbe es zwei Zeilen für diesen Artikel group by article.id
verwenden, wird es nur eine Zeile pro Artikel geben
count
verwenden, um herauszufinden, wie viele Tags jeder Artikel mit dem ersten Zunächst sollten Sie den Vorschlag von Pascal MARTIN zum Tischdesign verwenden.
Um ähnliche Artikel zu finden, hier ist etwas, mit dem Sie beginnen können. Da @ article_id der Artikel ist, nach dem Sie suchen möchten, und @ tag1, @ tag2, @ tag3 sind die Tags für diesen Artikel:
%Vor%ja, aber Sie haben meine Hauptfrage nicht beantwortet, wie Sie 3 ähnlichste Artikel bekommen?
Antwort: Suchen Sie einfach nach den gleichen Tag-IDs in der zusammengeführten Tabelle (tags_articles). Sammeln Sie sie und erstellen Sie ein Muster.
Zum Beispiel: Artikel 1 hat Tags: 1,2 Artikel 2 hat Tags: 2,3,4 Artikel 5 hat Tags: 6,7,2 Artikel 7 hat Tags: 7,1,2,3
Wenn Sie die 3 ähnlichsten Artikel für Artikel 1 möchten, müssen Sie nach den Tags 1,2 suchen. Sie werden feststellen, dass Artikel 7 am ähnlichsten ist und 2 und 5 Ähnlichkeiten aufweisen.
Tags und Links mysql database-design tag-cloud