我有一个如下表:
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
答案 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
字段添加到login
或account
表中,以便在知道组织后就可以填写它们。您必须考虑两个组织是否可以共享帐户,也许有必要进行更复杂的设计。但我将在这里保持简单。
您的脚本应加载所有login_id
和account_id
值并将它们缓存在某个位置。然后遍历所有内容,如果它们具有organization_id
,则将其login_id
或account_id
放入值为organization_id
的哈希图中。然后加载所有login_account
记录。如果login_id
或account_id
的哈希图中有一个organization_id
,则使用相同的organization_id
将另一个添加到其哈希图中。 (如果已经有一个,它将违反我所做的简单的组织唯一性假设,但这是您处理复杂性的地方-因此,我将抛出一个异常,看看它是否在运行脚本时发生)
希望这足以使您入门。当您正确设计这样的数据库时,您就可以自然地连接信息。这使列添加和将来的更新更加容易。祝你好运!