Cam*_*ter 4 mysql join group-concatenation
我有一个主要是静态目标的表格,另一个用于跟踪用户完成这些目标的情况。他们可以将完成与在另一个表格和/或文本注释中输入的一个或多个记录相关联。我想将所有这些一起格式化为一个条目以显示在表格中(即每个目标一行)。
下面是一个Completion可能看起来像的示例:
ID userID objectiveID recordID text
1 4 8 500 NULL
2 4 8 NULL "Lorem ipsum..."
3 4 8 750 NULL
Run Code Online (Sandbox Code Playgroud)
我已经走了这么远:
SELECT objectiveID,
GROUP_CONCAT(recordID SEPARATOR ',') AS records,
GROUP_CONCAT(text SEPARATOR ',') AS text
FROM Completion AS c
GROUP BY objectiveID;
Run Code Online (Sandbox Code Playgroud)
返回:
objectiveID records text
8 "500,750" "Lorem ipsum..."
Run Code Online (Sandbox Code Playgroud)
然而,我实际上想要显示的是被引用的代码的属性recordID......假设这是Record表:
ID userID codeID
500 4 1111
750 4 2222
Run Code Online (Sandbox Code Playgroud)
这是Code表:
ID description
1111 dolor
2222 sit amet
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
objectiveID records text
8 "dolor, sit amet" "Lorem ipsum..."
Run Code Online (Sandbox Code Playgroud)
合并其他值的最佳方法是什么?
你加入Completion(columns userID, recordID) 到Record(columns userID, ID)
你加入Record(列codeID)到Code(列ID)
这是建议的查询
SELECT c.objectiveID,
GROUP_CONCAT(d.description SEPARATOR ',') AS records,
GROUP_CONCAT(c.text SEPARATOR ',') AS text
FROM Completion AS c
INNER JOIN Record AS r ON c.userID=r.userID AND c.recordID=r.ID
INNER JOIN Code AS d ON r.codeID=d.ID
GROUP BY c.objectiveID;
Run Code Online (Sandbox Code Playgroud)
由于GROUP_CONCAT 的默认分隔符是逗号,因此您可以重写为
SELECT c.objectiveID,
GROUP_CONCAT(d.description) AS records,
GROUP_CONCAT(c.text) AS text
FROM Completion AS c
INNER JOIN Record AS r ON c.userID=r.userID AND c.recordID=r.ID
INNER JOIN Code AS d ON r.codeID=d.ID
GROUP BY c.objectiveID;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14708 次 |
| 最近记录: |