给出用于实现标签的SCHEMA
ITEM ItemId,ItemContent
标签TagId,TagName
ITEM_TAG ItemId,TagId
在使用标签选择时,限制返回的ITEMS数量的最佳方法是什么?
SELECT i.ItemContent, t.TagName FROM item i INNER JOIN ItemTag it ON i.id = it.ItemId INNER JOIN tag t ON t.id = it.TagId
当然是最简单的方法可以让他们全部回来,但是使用限制子句会分解,因为你得到了每个标签的所有项目的副本,这些项目都计入LIMIT中的行数.
我的第二个解决方案使用MySQL函数GROUP_CONCAT()将匹配项的所有标记组合到结果集中以逗号分隔的字符串中.
SELECT i.ItemContent, GROUP_CONCAT(t.TagName ORDER BY t.TagName) AS TagList FROM item AS i INNER JOIN ItemTag AS it ON i.id = it.ItemId INNER JOIN tag AS t ON t.id = it.TagId GROUP BY i.ItemId;
GROUP_CONCAT()函数是MySQL特性,它不是标准SQL的一部分.