表连接-到一列(/单元格)的多行/

| 我已经找到了解决此问题的方法,但尚未找到它,可能是因为我不太了解如何自己正确地解释它。如果它已经发布在某个地方,请告诉我。 我拥有的是三个相互关联的数据库。主要,碎片和群组。基本上,主数据库包含帖子中最基本/最常用的信息,而件数据库包含与该帖子关联的数据。组数据库包含主数据库中帖子可以“发布”的所有(长)组名称。帖子可以同时在多个组中发布。当新帖子添加到我的网站时,我也会检查这些部分,以查看是否有重复项(检查该帖子是否已经发布)。为了使搜索重复更加有效,我只检查发布在同一组中的件。 希望您仍然与我在一起,因为这是我开始感到困惑的地方(请让我知道是否需要更清楚地指定内容):现在,主要数据库和碎片数据库都包含完整的数据库组的名称(基本上我根本不使用组数据库)。我要执行的操作是使用来自组数据库的关联ID替换这些组的名称。例如,我要更改此: 从: MAIN_table: id | group_posted_in -------- | --------------------------- 1 | group_1,group_5 2 | group_15,group_75 3 | group_1,group_215 GROUPS_table: id |组的名字 -------- | --------------------------- 1 |组_1 2 |组_2 3 | group_3 等等... 变成: MAIN_table: id | group_posted_in -------- | --------------------------- 1 | 1,5 2 | 15,75 3 | 1,215 或类似的东西。但是,这种格式特别会引起问题,因为以下查询将返回所有行(来自示例),而不仅仅是我需要的行:
SELECT * FROM main_table WHERE group = \'5\'
我要么必须将查询更改为以下内容:
...WHERE group = \'5\' OR group = \'5,%\' OR group = \'%,5,%\' OR group = \'%,5\'
或者,我必须将数据库结构从“逗号分隔值”更改为以下形式:[15] [75]。附带的查询会更简单,但是对我来说似乎有点麻烦。此外,(简单)联接将根本不容易/根本不可能。始终需要我运行一个单独的查询来获取组的名称-用户是否在特定组中搜索帖子(在这种情况下,我首先必须运行查询以获取ID的名称,然后来搜索相关的帖子),或者是否要显示它们(首先是帖子,然后是另一个查询以匹配组)。 因此,总而言之:我想我知道可以解决这个问题,但是我的直觉告诉我,这不是正确/最佳的解决方法。因此,我想将这篇文章联系在一起的问题是: 将组数据库连接到其他数据库的正确方法是什么?     
已邀请:
        对于多对多关系,您需要创建一个联接表。不要将组列表存储在单个列中,而应将该列拆分为单独表中的多行。这将使您能够对它们执行基于集合的功能,并显着加快数据库的速度,并使它更加健壮和防错。
Main
MainID ...

Group
GroupID GroupName

GroupsInMain
GroupsInMainID MainID(FK) GroupID(FK)
因此,对于MainID 1,您将具有GroupsInMain记录:
1,1,1
2,1,5
这会将组1和5与MainID 1相关联 在这种情况下,FK表示外键(即在另一个表中对主键的引用)。您可能还想在MainID和GroupID上向GroupsInMain添加唯一约束,因为您永远不希望配对的相同值出现多次。 您的查询将是:
select GroupsInMain.MainID, Group.GroupName
    from Group, GroupsInMain
    where Group.GroupID=GroupsInMain.GroupID
        and Group.GroupID=5
    

要回复问题请先登录注册