Php 在sql查询中将concat值作为名称与其他行分开分组
在这个查询中,我得到如下表结构Php 在sql查询中将concat值作为名称与其他行分开分组,php,mysql,sql,Php,Mysql,Sql,在这个查询中,我得到如下表结构 SELECT GROUP_CONCAT(`flim_category_name` SEPARATOR '*') `flim_category_name`,country, GROUP_CONCAT(`flim_video` SEPARATOR '*') flim_video, GROUP_CONCAT(`flim_video_images` SEPARATOR '*') flim_video_images FROM flim_management_t
SELECT GROUP_CONCAT(`flim_category_name` SEPARATOR '*')
`flim_category_name`,country, GROUP_CONCAT(`flim_video` SEPARATOR '*') flim_video,
GROUP_CONCAT(`flim_video_images` SEPARATOR '*') flim_video_images FROM
flim_management_table GROUP BY `country` limit 0,1
flim_category_name country flim_video flim_video_images
Guru*Mersal*Aadi India ww.com,ww.com,ww.com* ww.com,ww.com,ww.com* ,,, 217953157.jpg,,,,,,,,,*,,,,,,,,,
我需要用start分隔符,而不是像这样分隔行
SELECT GROUP_CONCAT(`flim_category_name` SEPARATOR '*')
`flim_category_name`,country, GROUP_CONCAT(`flim_video` SEPARATOR '*') flim_video,
GROUP_CONCAT(`flim_video_images` SEPARATOR '*') flim_video_images FROM
flim_management_table GROUP BY `country` limit 0,1
flim_category_name country flim_video flim_video_images
Guru*Mersal*Aadi India ww.com,ww.com,ww.com* ww.com,ww.com,ww.com* ,,, 217953157.jpg,,,,,,,,,*,,,,,,,,,
我需要这样构造表。您可以使用Mysql的函数:
flim1 flim2 flim3 country flim_video1 flim_video2 flim_video3 images1 image2 image 3
Guru Mersal Aadi India ww.com,ww.com,ww.com ww.com,ww.com,ww.com ,,, 217953157.jpg,,, ,,,,, ,,,,,
从表group by Country中选择group_concat(电影类别名称)、国家、group_concat(电影图像)、group_concat(电影url)
对于oracle,请检查以下内容:
在oracle中,我能想到的最好的方法就是这个 select group_concat(Film_category_name), Country, group_concat(flim_images),group_concat(flim_url) from table group by country 输出如下所示:
WITH f AS
(
SELECT 'Ghajini' film_category_name ,
'INDIA' country ,
'IMG1.jpg,iMAGE2.JPG' flim_images,
'WW.COM,WW.COM,WW.COM' flim_url
FROM dual
UNION ALL
SELECT 'dIWALE' film_category_name ,
'INDIA' country ,
'IMG1.jpg,iMAGE2.JPG' flim_images,
'WW.COM,WW.COM' flim_url
FROM dual
UNION ALL
SELECT 'gURU' film_category_name ,
'SOUTH AFRICA' country,
'IMG1.jpg,iMAGE2.JPG' flim_images,
'WW.COM,WW.COM' flim_url
FROM dual ), f2 AS
(
SELECT f.* ,
Row_number() over (PARTITION BY country ORDER BY ROWNUM ) rn
FROM f ), f3 AS
(
SELECT Listagg(film_category_name,',') within GROUP ( ORDER BY ROWNUM ) over ( PARTITION BY country ) film_category_name ,
country ,
flim_images,
flim_url,
rn
FROM f2 )
SELECT *
FROM f3 pivot ( max(flim_images) AS flim_images_row ,
max(flim_url) AS flim_url FOR rn IN (1,2) ) p
ORDER BY film_category_name;
如果您不知道每个
国家/地区的行数,那么您唯一的选择就是使用动态SQL动态生成和执行查询。但是,我不建议这样做,因为表的结构和设计对于任何数据提取都是低效的。您需要重新构造组件,并在需要存储和检索有用数据的地方创建单独的表。到目前为止,您尝试了什么….?Mysql和Oracle DBs不同..您使用的是哪一种..?没有答案。我们怎么知道“连接列”是什么意思?什么专栏?你可以通过mysql的group_concat获得接近你的结果,这是一个糟糕的结构