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 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字段。@马克·班尼斯特:谢谢你的格式和说明。