mysql - MySQL 将 FIND_IN_SET 与 GROUP_CONCAT 和联接结合起来
问题描述
我想从 MySQL 数据库中选择新闻稿。
xxxxxxxxxxxxxxxxxxxxxxxxxxx
表:
新闻稿内容
ID|PressRelease|DomainLanguages|Day|Title|SubTitle|Menu|Text|FileType|Active
PressRelease(在图片字段中以逗号分隔的多个图像 ID)
ID|Name|Category|News|Groups|Product|Pictures|PictureType|Active
730|14.08.2018 - New Product|txt_pressreleases|0|0|0|5218,5219,5221,5222,5223,5224,5225,5226,5227,5228|press|1
图片
ID|FileName|PictureType|DomainLanguages|Active
5227|downloads/press/1|jpg|1|1
5228|downloads/press/2|jpg|1|1
5229|downloads/press/3|jpg|1|1
xxxxxxxxxxxxxxxxxxxxxxxxxxx
询问:
SELECT pr.ID, pr.Name, pr.Category, pr.Pictures, pr.PictureType, prc.ID,
prc.DomainLanguages, prc.Day, prc.Title, prc.SubTitle, prc.Menu, prc.Text,
prc.FileType, pic.FileName
FROM `PressRelease` pr
LEFT JOIN PressReleaseContent prc ON ( pr.ID = prc.PressRelease )
LEFT JOIN Picture pic ON ( FIND_IN_SET( pic.ID, pr.Pictures ) )
WHERE pr.Active =1
#GROUP BY prc.ID
一个新闻稿内容的多个条目的结果。在以下示例中,ID 为 2455 的新闻稿内容重复了 2 次,因为新闻稿包含 2 张图像 5227 和 5228:
...
730|14.08.2018 - new product|txt_pressreleases|5218,5219,5221,5222,5223,5224,5225,5226,5227,5228|press|2455|6|3||Première mondiale pendant|||docx|downloads/press/1|5227
730|14.08.2018 - 新产品|txt_pressreleases|5218,5219,5221,5222,5223,5224,5225,5226,5227,5228|press|2455|6|3||Première mondiale 吊坠|||docx|下载/按/2|5228 ...
xxxxxxxxxxxxxxxxxxxxxxxxxxx
我的问题是 PressRelease 表在“图片”字段中包含逗号分隔的图片 ID。所以我使用带有“FIND_IN_SET”的连接来从图片表中接收图片的文件名。这可行,但现在我为每个找到的图像获得多个结果。相反,对于文件名按逗号分组的每个新闻稿内容,我只想要一个结果:image1.jpg、image2.jpg、image3.jpg 等。
xxxxxxxxxxxxxxxxxxxxxxxxxxx
图像名称用逗号分隔的理想结果:
730|14.08.2018 - new product|txt_pressreleases|5218,5219,5221,5222,5223,5224,5225,5226,5227,5228|press|2455|6|3||Première mondiale pendant|||docx|downloads/press/1,downloads/press/2,|5228
xxxxxxxxxxxxxxxxxxxxxxxxxxx
只有一个以逗号分隔的图片名称的结果。这就是我需要的。
当我将 GROUP_CONCAT 添加到 SELECT 时,我得到了这个:
xxxxxxxxxxxxxxxxxxxxxxxxxxx
SELECT pr.ID, pr.Name, pr.Category, pr.Pictures, pr.PictureType, prc.ID, prc.DomainLanguages, prc.Day, prc.Title, prc.SubTitle, prc.Menu, prc.Text, prc.FileType, GROUP_CONCAT(pic.FileName)
xxxxxxxxxxxxxxxxxxxxxxxxxxx
结果:
1|01.01.2002 - first news|txt_pressreleases|1|press|1|6|3||Première news|<ul class="jmpdwn">|<a name|docx|downloads/press/1,downloads/press/1, downloads/press/1, downloads/press/1,downloads/press/1, downloads/press/1,...
我只得到一个结果,主表的第一个数据集和所有文件名用逗号分隔。那么我该怎么做呢?谢谢!
解决方案
推荐阅读
- docker - .Net 5 WebApp/WebAPI 推送和拉取到远程 docker 机器
- python - 如何通过输入列表名称和对象来显示列表中有多少对象?
- macros - 是否可以仅使用语法规则来定义照应宏?
- javascript - 如何将 json 作为道具传递给 React 中 API 发布的子组件?
- excel - 使用搜索,跨多个列查找函数
- relational-database - 我们可以为弱实体添加主键吗?
- android - Android - 嵌套 LinearLayout 中的按钮不显示
- python - 如何创建其值基于另一列的值的列?
- python - django-admin startproject 不起作用(macOS Big Sur)
- share - 如何与朋友分享我的 Alexa 智能家居技能