首页 > 解决方案 > 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,...

我只得到一个结果,主表的第一个数据集和所有文件名用逗号分隔。那么我该怎么做呢?谢谢!

标签: mysql

解决方案


推荐阅读