MySQL单查询实现两表关联:将子表数据转为数组格式
在MySQL中关联两表并将图片字段聚合为数组格式查询
当然可行,MySQL提供了两种实用方法来实现这个需求,将关联的图片名称聚合为数组/结构化集合:
方法1:使用GROUP_CONCAT(兼容所有MySQL版本)
利用GROUP_CONCAT函数将同一条新闻的图片名称拼接成字符串,若需要数组格式,可通过字符串拼接生成JSON风格的数组:
SELECT n.newsId, n.topic, CONCAT('[', GROUP_CONCAT('"', i.imgName, '"'), ']') AS imgArray FROM tbl_news n LEFT JOIN tbl_imgs i ON n.newsId = i.newsId WHERE n.newsId = 1 -- 可根据需要筛选特定新闻,或去掉WHERE查询所有 GROUP BY n.newsId, n.topic;
查询结果示例:
| newsId | topic | imgArray |
|---|---|---|
| 1 | top1 | ["img1.jpg","img2.jpg","img3.jpg","img4.jpg"] |
方法2:使用JSON_ARRAYAGG(MySQL 8.0+版本支持)
如果你的MySQL版本是8.0及以上,推荐使用原生JSON函数JSON_ARRAYAGG,它会直接生成标准的JSON数组,无需手动拼接:
SELECT n.newsId, n.topic, JSON_ARRAYAGG(i.imgName) AS imgArray FROM tbl_news n LEFT JOIN tbl_imgs i ON n.newsId = i.newsId WHERE n.newsId = 1 GROUP BY n.newsId, n.topic;
该查询返回的imgArray字段是标准JSON数组类型,在应用层可以直接解析为数组对象。
内容的提问来源于stack exchange,提问作者Rıza Altınok
相关产品推荐
相关产品推荐

