我有两个与用户信息相关的表:表1(用户)包含诸如id、用户名和电子邮件之类的列。表2(详细信息)包含诸如user_id、degree_name和degree等列。当我连接这两个表时,我得到的结果是:
name degree_name degree
john doe Metric Science
john doe Fsc Engineering
john doe Bsc BSCS
herald Metric Science
Matt Metric Science在上面的记录中,“无名氏”重复了3次。什么不应该是预期的结果。我在这里想要的结果是,我知道也可以通过使用find_in_set()来实现:
0: {name: john doe
details: {0: {degree: "Science",degree_name: "Metric"}
1: {degree: "Fsc",degree_name: "Engineering "}
2: {degree: "Science",degree_name: "BSCS"}}}
1: {name: herald
details: {0: {degree: "Science",degree_name: "Metric"}}}
2: {name: Matt
details: {0: {degree: "Science",degree_name: "Metric"}}}有没有人指导我回答正确的问题?
发布于 2019-04-19 20:34:27
你可以对学位和degree_name使用group_concat。例如::
SELECT name, group_concat(degree), group_concat(degree_name) FROM Table1,Table2 WHERE Table1.id=Table.User_id. GROUP BY Table1.id它将为您提供一个用户的一行结果。
无名氏|公制,金融服务中心,理科|科学,英语,BCSc。
发布于 2019-04-22 21:12:21
SELECT u.username, CONCAT('{ "array": [',
GROUP_CONCAT(CONCAT('{"degree_name": "',
d.degree_name,
'", "degree": "',
d.degree,
'"}'
) separator ','),
']}') As details
FROM details d
INNER JOIN users u
ON FIND_IN_SET(u.id, d.user_id) > 0
GROUP BY u.id;此查询将提供预期的答案。只需要一点开销,在获得结果后json解析记录。
https://stackoverflow.com/questions/55761798
复制相似问题