Ich versuche, ein einfaches Tagging-System (Herumspiele in php) zu implementieren ...Erste GROUP_CONCAT Werte als Einzelwert
ich den folgenden SQL-Befehl verwenden, um den erforderlichen Thread, dessen Autor und die Tags zu bekommen assoziiert mit ihm:
$thread = select_Query("SELECT thread.title, thread.id as t_id,
thread.content, author.username, author.id as a_id,
GROUP_CONCAT(DISTINCT tags.name ORDER BY tags.name DESC SEPARATOR ',') AS tags
FROM thread JOIN thread_tags ON thread.id = thread_tags.thread_id
JOIN tags ON thread_tags.tag_id = tags.id
INNER JOIN author on author.id = thread.author_id
WHERE thread.id = $id", $link);
Wie Sie sehen können, verwende ich GROUP_CONCAT. Das funktioniert gut, aber wenn ich das tue, erscheinen die Tags alle in einer Variablen und ich weiß, dass ich $pieces = explode(",", $thread['tags]);
verwenden kann. Gibt es eine andere Möglichkeit, dies zu tun? Ich frage das, weil Tags leicht zu trennen sind, wenn es etwas komplizierter ist (z. B. etwas, das das Trennzeichen enthält).
Mein Datenbankschema ist wie folgt:
thread: id, Inhalt, Titel, author_id
thread_tags: id, tag_id, thread_id
tags: id, name
Warum sollte ein Tag ein Trennzeichen enthalten? Ich würde denken, dass das Programm selbst das als eine Tag-Trennung zählen und entsprechend behandeln sollte. –
Keine Tags, etwas anderes, das auch eine Eins-zu-viele-Beziehung mit dem Thread haben könnte. "Tags sind jedoch einfach zu trennen, wenn es etwas komplizierter ist (z. B. etwas, das den Begrenzer enthält)." Der Teil sagt jedoch etwas komplizierter. – eddienotizzard
gibt es einige Hinweise über group_concat in diesem Beitrag http://stackoverflow.com/questions/452357/mysql-group-concat-escaping –