Mysql标记查询-重复值
我正在做一个基于标签的搜索。用户可以搜索一个标记或多个标记。我有3个表格:内容、内容标签和标签。Content_标记在内容和标记之间建立链接。查询必须返回检索到的内容的所有信息,这包括来自该内容的所有标记的串联字符串 使用另一个问题中的一个例子,我成功地实现了这个查询:Mysql标记查询-重复值,mysql,Mysql,我正在做一个基于标签的搜索。用户可以搜索一个标记或多个标记。我有3个表格:内容、内容标签和标签。Content_标记在内容和标记之间建立链接。查询必须返回检索到的内容的所有信息,这包括来自该内容的所有标记的串联字符串 使用另一个问题中的一个例子,我成功地实现了这个查询: SELECT content.Name,GROUP_CONCAT(t2.Tag SEPARATOR ' ') FROM content JOIN content_tags ct1 ON content.ContentID =
SELECT content.Name,GROUP_CONCAT(t2.Tag SEPARATOR ' ') FROM content
JOIN content_tags ct1 ON content.ContentID = ct1.ContentID
JOIN tags t1 on ct1.TagID = t1.TagID AND t1.Tag IN('grass','texture')
JOIN content_tags ct2 ON ct2.ContentID = content.ContentID JOIN tags t2 ON ct2.TagID = t2.TagID GROUP BY content.ContentID;
当搜索1个标记时,查询工作正常,但是使用('grass','texture')中的
组将返回'grass-grass-texture-texture'(重复标记)。
我对MySQL不太了解,如何解决这个问题?该查询起初不起作用,但经过一些修改后,我得到了我想要的。谢谢(如果有一种方法可以使用连接而不是子查询,这对性能来说是很好的)Jorge:对于这个查询,子查询在性能方面比
连接
更好。只需在content\u标记(ContentID,tag)
上创建一个UNIQUE
索引。
SELECT content.name,
(
SELECT GROUP_CONCAT(cta.tag)
FROM content_tags cta
WHERE cta.contentID = ct.contentID
)
FROM content_tags ct
JOIN content c
ON c.contentId = ct.contentId
WHERE ct.tag IN ('grass', 'texture')
GROUP BY
ct.contentId
HAVING COUNT(*) = 2