1. 程式人生 > >Mysql之一對多查詢,如何將多條記錄合併成一條記錄

Mysql之一對多查詢,如何將多條記錄合併成一條記錄

資料庫環境:mysql5.6

需求描述(圖1):
這裡寫圖片描述

最終期望的結果(圖2):
這裡寫圖片描述

如上圖所示,現有兩張表cj_lottery_winning_record和cj_lottery_winning_user_info
兩者的關係是一對多。
現在進行連線查詢時,
SELECT
a.id winning_id,
a.awards_setting_id,
a.award_name,
a.award_type,
a.create_time,
a.awards_name,
a.get_status,
a.push_status,
b.key,
b.value honoree_info
FROM
cj_lottery_winning_record a
LEFT JOIN cj_lottery_record_user_info b
ON a.id = b.winning_id
WHERE activity_id=’100270’
ORDER BY a.create_time DESC LIMIT 0,10;
會得到圖1所示的結果。

如果想得到圖2所示的結果,只需將sql語句改成下面的即可:
SELECT
a.id winning_id,
a.awards_setting_id,
a.award_name,
a.award_type,
a.create_time,
a.awards_name,
a.get_status,
a.push_status,
b.info
FROM
cj_lottery_winning_record a
LEFT JOIN
(SELECT
winning_id,
GROUP_CONCAT(
IF(
key

= ‘微信’,
CONCAT(‘微信:’, value, ‘,’),
IF(
key = ‘手機’,
CONCAT(‘手機:’, value, ‘,’),
IF(
key = ‘地址’,
CONCAT(‘地址:’, value, ‘,’),

)
)
)
) AS info
FROM
cj_lottery_record_user_info
GROUP BY winning_id) b
ON a.id = b.winning_id
WHERE a.activity_id = ‘100270’
ORDER BY a.create_time DESC
LIMIT 0, 10 ;