与相关变量分组

时间:2018-10-29 04:28:51

标签: mysql

我有一个如下表:

Account no.    Login Name    Numbering
1234           rty234        1
1234           bhoin1        1
3456           rty234        2
3456           0hudp         2
9876           cfrdk         3

从上表中,您可以看到rty234和bhoin1注册了相同的帐户号1234,因此我知道rty234和bhoin1是相关的,我将其编号为1。编号字段基于帐户号。 然后,我发现rty234还注册了另一个帐户3456,而0hudp也注册了相同的帐户。因此,我得出结论,rty234,bhoin1和0hudp是相关的。因此,我想将第三和第四行重新编号为1。如果它们不再相关,则只需保留编号即可。我该如何使用mysql实现这一目标。

预期输出如下:

Account no.    Login Name    Numbering    New_Numbering
1234           rty234        1            1
1234           bhoin1        1            1
3456           rty234        2            1
3456           0hudp         2            1
9876           cfrdk         3            3

1 个答案:

答案 0 :(得分:0)

您需要了解如何设计关系数据库。

您要在New_Numbering字段中进行的这些分组应在注册帐户时进行。我看到两个需要跟踪的任意信息:帐号和登录名。似乎注册帐户的人可以在这里有效输入任何内容,也许帐号必须是数字。那个细节没关系。

您想要的是一个帐户,该帐户可以有多个与其关联的帐号和多个登录名。我还假设未来的发展可能会增加更多的信息,例如-人们为什么需要多次登录?也许有不同的人在使用它们,或者有不同的应用程序。大概,我们可以收集有关登录名的其他信息,该信息存储有关每个登录名的其他详细信息。关于帐号也可以这么说-当然,它们不仅包含帐号,还包含更多详细信息。

首先,您需要一个主login表。
您将rty234和bhoin1描述为独特的人。因此,使它为login_name列,它是login表中的唯一索引。该表应具有自动递增login_id作为主键。该表可能还包含一个password字段和有关该人的其他信息。

第二,创建一个account表。
创建他们的登录名后,让他们使用该登录名注册一个帐户。使此过程分为两个步骤。当他们提供新帐号时,请在account表中为其创建一条记录,其中包含只有帐户持有人才能知道的其他标识信息。我认为,为了创建此记录,您必须以某种方式验证这实际上是他们的帐户。除了account_id之外,此表还将包含一个称为account_no的自动递增主键,以及有关该帐户的其他详细信息。

第三,创建一个login_account表。
验证登录名实际上应该有权访问帐户后,请在此处创建一条记录。它应该包含一个login_id和一个连接这两个表的account_id。另外,最好包含提供的信息,该信息表明此登录名应有权访问该帐户。

现在,当您要查询此数据时,您可以找到具有相同login_id或account_id,甚至共享具有特定注册的登录名或帐户的数据组。除此之外,在SQL查询中也很难做到。因此,如果您真的希望能够浏览数据并查看谁在同一组织中或某人中,因为他们共享同一组的登录名或帐户,则必须具有某种脚本。

创建一个organization表。
该表应包含一个organization_id,以便您可以对其进行跟踪,但是一旦标识了该组,可能需要添加名称或其他注释,或将其链接到其他功能。然后,您也可以将此organization_id字段添加到loginaccount表中,以便在知道组织后就可以填写它们。您必须考虑两个组织是否可以共享帐户,也许有必要进行更复杂的设计。但我将在这里保持简单。

您的脚本应加载所有login_idaccount_id值并将它们缓存在某个位置。然后遍历所有内容,如果它们具有organization_id,则将其login_idaccount_id放入值为organization_id的哈希图中。然后加载所有login_account记录。如果login_idaccount_id的哈希图中有一个organization_id,则使用相同的organization_id将另一个添加到其哈希图中。 (如果已经有一个,它将违反我所做的简单的组织唯一性假设,但这是您处理复杂性的地方-因此,我将抛出一个异常,看看它是否在运行脚本时发生)

希望这足以使您入门。当您正确设计这样的数据库时,您就可以自然地连接信息。这使列添加和将来的更新更加容易。祝你好运!