从多个关系中匹配

Elf*_*lfy 8 sqlite many-to-many

我有一个"帖子"表.每个帖子记录可以有一个或多个标签.如果我将标记存储到单个列中,作为逗号分隔的字符串,我可以轻松找到标记为"Abc"并标记为"Def"的帖子,甚至可以进行部分匹配.

我正在使用sqlite和这个方法的"FTS"表,它工作正常,但有人告诉我这是一个不好的做法,我应该将标签存储在另一个表中并使用JOIN.如果我将标记存储在不同的表中并在这两个表之间创建关系,如何在单个查询中找到标记为"Abc"和标记为"Def"的帖子?可能吗?

小智 0

如果您想标准化您的数据库,我肯定会将此信息拆分为多个表。我编写了一个架构和一些示例查询,展示了如何提取数据。您可以在这里查看:http://sqlfiddle.com/#!9/48ebb /15

基本上你会有 3 个表:

  • POST 表:包含帖子信息。
  • POSTTAGS 表:是包含 POST 表和 TAG 表中的 ID 的连接表
  • TAG表:包含标签信息

这样,您就不会重复存储相同的标签信息。

最后,这是来自上面发布的 sqlfiddle 的示例查询:

-- find all posts with the tags associated with them
SELECT DISTINCT POST.*, GROUP_CONCAT(tagName SEPARATOR ', ') AS associatedTags
FROM POST
   INNER JOIN POSTTAGS ON POST.postId = POSTTAGS.postId
   INNER JOIN TAG ON TAG.tagId = POSTTAGS.tagId
Run Code Online (Sandbox Code Playgroud)