Mysql 返回特定行的SQL自连接

Mysql 返回特定行的SQL自连接,mysql,Mysql,跳到底部以避免冗长的解释 id label client parent_element 1 Standard Thing NULL NULL 2 Harrys Thing 1 1 3 Bobs Thing 2 1 4 Different Thing NULL NULL 好的,那么 我在公司内部网上工作,负责管理客户的工作。工作由元素组成:一个示例元素可能是“构建一个六页的网站”或“设计一个徽标” 每个

跳到底部以避免冗长的解释

id  label           client  parent_element
1   Standard Thing  NULL    NULL
2   Harrys Thing    1       1
3   Bobs Thing      2       1
4   Different Thing NULL    NULL
好的,那么

我在公司内部网上工作,负责管理客户的工作。工作由元素组成:一个示例元素可能是“构建一个六页的网站”或“设计一个徽标”

每个元素都包含一组角色小时数,因此“构建一个六页网站”可能包括四个小时的“开发人员”费率和两个小时的“设计师”费率(好的,可能再长一点:)

显然,不同的客户得到不同的小时费率。而且,尽管系统中已经考虑到了这一点,但它并没有给我们足够的灵活性。传统上,我们的客户经理相当。。。临时。。。根据他们的定价,“构建一个六页网站”元素可能包括标准的开发人员为客户“Bob”工作四小时,但为客户“Harry”工作八小时

请容忍我。我将很快进入实际代码

当然,元素存储在“Elements”数据库表中,该表只包含一个ID和一个文本标签

对于“我们需要特定于客户端的元素”问题,我的正在进行的工作解决方案是在此表中添加一个“客户端”字段。然后,我们可以浏览并添加任何特定于客户端的可用元素版本,并根据口味进行调整

当客户经理向他们的作业添加元素时,他们应该只看到(a)任何人都可以使用的元素,也就是说,他们有一个空的客户机字段,或者(b)特定于作业客户机的元素

到目前为止,请选择位置

但这并不能解决问题。如果我专门为Harry添加第二个“构建一个六页网站”元素,那么为Harry添加元素的客户经理将看到该元素的标准版本和Harry版本。这不好。只有在没有适用的特定于客户端的版本时,他们才应该看到标准版本

好的。。。soooo:除了在元素表中添加一个“客户机”字段外,还要添加一个“父元素”字段。然后我们可以做一些神奇的自我引用,包括将表连接到自身,并只获取相关角色

因此,我期待已久的问题是:

哦,看,一个实际的问题

id  label           client  parent_element
1   Standard Thing  NULL    NULL
2   Harrys Thing    1       1
3   Bobs Thing      2       1
4   Different Thing NULL    NULL
鉴于此表结构,如何编写一个SQL查询来接受“客户机ID”参数并返回:

  • 对于客户端ID 1,第2行和第4行
  • 对于客户端ID 2,第3行和第4行
  • 对于客户端ID 42,第1行和第4行
对于额外的奖励积分,结果应包括父元素标签。因此,对于客户端ID 1,例如:

id  label           standardised_label      client  parent_element
2   Harrys Thing    Standard Thing          1       1
4   Different Thing Different Thing         NULL    NULL
(客户端,父元素)
上创建索引,以便快速运行


请参阅。

+1“哦,看,一个实际的问题”您的“期待已久的问题”除了您提出的任何其他问题外,还应该包括一个。如果您收到id 42,您如何将其与第1行和第4行关联?很抱歉,但我不知道如何将每个结果与给定的客户端关联起来。难道所有结果都不返回第1行吗?它有一个
NULL
client字段。@马克·班尼斯特:谢谢你的格式和说明。