Einzelnen Beitrag anzeigen
  #1  
Alt 04.08.2016, 14:17:26
Nullzeit Nullzeit ist offline
Anfänger
 
Registriert seit: Aug 2016
Alter: 40
Beiträge: 1
DB Design & Abfrage für Multitagging

Hallo zusammen :-)
Ich bin nicht so fit in PHP/SQL und dachte ich bessere meine Fertigkeiten etwas auf. Da ich Wordpress gerne und oft nutze habe ich mir vorgenommen ein Plugin für die Suche zu schreiben, einfach um am Ball zu bleiben. Mein Ziel ist eine Gallerieverwaltung, die Umsetzung ist schon gut gediehen, doch beim Tagging, bzw der Suche mit mehreren Tags habe ich Verständnissprobleme... Ich habe zwei Wege probiert:

Nach dem Vorbild von WP:
"terms" mit den Spalten term_id(int, auto_increment), name (varchar(100)), slug(varchar(100))
"pictures" mit den Spalten pic_id(int, auto_increment), url(varchar(255)), pic_url(varchar(255)), name(varchar(100)), frei(bool), changed(timestamp)
"relations" mit den Spalten pic_id(int), term_id(int), term_order(int)

Die Abfrage für ein Keyword sieht dann etwa so aus:
Code:
	SELECT pictures.url, pictures.pic_url, pictures.name FROM relations, terms, pictures WHERE relations.pic_id = pictures.pic_id AND relations.term_id = terms.term_id AND terms.slug = "TAGNAME" ORDER BY pictures.changed
Bei dieser Variante scheitere ich schlichtweg an der richtigen Abfrage für mehrere Tags... steh da irgendwie auf dem Schlauch...

2te Variante
Nur eine Tabelle "pictures" mit den Spalten pic_id(int, auto_increment), url(varchar(255)), pic_url(varchar(255)), name(varchar(100)), frei(bool), changed(timestamp) und tags(varchar(200))

Dabei wird in die Spalte Tags der Tag mit einem Trennzeichen eingetragen: "tag1-tag2-tag3-tag4...". Abfragen kann ich dann mit LIKE oder CONTAINS und anhand des Trennzeichens in ein Array speichern.

Dabei kam mir die Frage ob das nicht bei größeren Datensätzen sehr langsam wird. Zudem habe ich keine Ahnung wie man die vorhandenen Tags abfragt, sprich eine Liste aller Tags.

Gehe ich da vielleicht einen völlig falschen Weg? Bin für jede Hilfe dankbar :-)
LG Chris
Mit Zitat antworten