我正在尝试实现一个简单的标记系统(在 php 中乱搞)...
我使用以下 sql 命令来获取所需的线程、它的作者和与之关联的标签:
$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);
如您所见,我正在使用 GROUP_CONCAT。这工作正常,但是当我这样做时,标签都出现在一个变量中,我知道我可以使用 $pieces = explode(",", $thread['tags]);
但是还有另一种方法吗?我问这个是因为标签很容易分开,但是如果它是更复杂的东西(例如包含定界符 , 的东西)。
我的数据库架构如下:
thread: id, content, title, author_id
thread_tags: id, tag_id, thread_id
tags: id, name
最佳答案
您可以将 GROUP_CONCAT
使用的分隔符更改为不会出现在标记中的内容,例如“|”性格。
GROUP_CONCAT(DISTINCT tags.name ORDER BY tags.name DESC SEPARATOR '|')
您还可以验证标记字段并确保它不包含分隔符。
关于php - 获取 GROUP_CONCAT 值作为单独的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631100/