我有这个由程序生成的大型 MySQL 查询。在此查询的一部分中,我必须将服务器单元格合并到一个单元格中。这是因为该人可能有多个表单条目(在相同数据的情况下,我得到的是汽车、房屋、自行车和婴儿车)。我可以使用 GROUP_CONCAT 使其成为一个字段,每个字段分开并且效果很好,但是有一个问题。
有些人没有填写所有信息,所以以汽车为例,有三辆,但一辆 1 有一张照片,恰好是第三辆。所以我所有的结果,但不是原来的顺序
我在桌子上的东西
身份证号 | 所有者编号# | 制作 | 型号 | 年份 | 图片 ----+----------+---------+------------+------+----- -------- 1 | 3 | 花冠| gt-s | 1986 | 2 | 3 | 适合 | V6 | 2001 | 3 | 3 | 小明星 | 燃气轮机 | 1981 | 汽车.jpg 4 | 4 | F-150 | 超级责任 | 2010 | 5 | 5 | 甲虫| | 1968 |
当我运行我的 GROUP_CONCAT 查询时,我得到了这个
身份证号 | 所有者编号# | 制作 | 型号 | 年份 | 图片 ----+------------+---------+------------ +----------------+------------- 1 | 3,3,3 | 花冠,合身,小明星| 高分辨率照片| CLIPARTO gt-s,V6,GT | 1986,2001,1981 | 汽车.jpg 4 | 4 | F-150 | 超级责任 | 2010 | 5 | 5 | 甲虫| | 1968 |
但我想得到这个
身份证号 | 所有者编号# | 制作 | 型号 | 年份 | 图片 ----+------------+---------+------------ +----------------+------------- 1 | 3,3,3 | 花冠,合身,小明星| 高分辨率照片| CLIPARTO gt-s,V6,GT | 1986,2001,1981 | ,,汽车.jpg 4 | 4 | F-150 | 超级责任 | 2010 | 5 | 5 | 甲虫| | 1968 |
注意“carimage.jpg”中的两个逗号
问题似乎集中在查询的第一部分SELECT GROUP_CONCAT(cfv.value) FROM cf_customfield_values cfv。我已经尝试了一些方法来让它按照我需要的方式运行。
在 GROUP_CONCAT 中使用 IFNULL 将空值更改为其他值
稍微移动 IFNULL 看看我是否可以获得更好的结果
使用传统的 IF 语句将空值更改为其他值
使用 COALESCE 确保始终至少有 1 个非NULL
将字符串连接到值的开头和/或结尾,以便它总是有一个刺痛,因此不是 NULL
我什至尝试将其设为 GROUP_CONCAT('test'),这清楚地表明它真的没关系里面有什么它仍然会意识到它是一个 NULL 并且它不会连接它。
我真正想要这样做的原因是,我可以将连接的值分解为子表以进行显示(显然我会使用逗号以外的东西来防止显示脚本部分出现任何可能的错误)。
哇,这比我想象的要长,TLDR;我需要 GROUP_CONCAT 来连接与值相同的空值。
完整的 SQL
SELECT *, pregi.ttl AS 'general_information-name' , (SELECT GROUP_CONCAT(DISTINCT '[subtablerow]',CONCAT('[row num="',proffv.profileid,'"]',proffv.value),'[/subtablerow]') FROM cf_profiles_fields_values proffv LEFT JOIN cf_profiles_fields proff ON proffv.fieldid=proff.id LEFT JOIN cf_profiles prof ON prof.id=proffv.profileid WHERE proff.id='1') AS 'profile_first_name' , (SELECT GROUP_CONCAT(DISTINCT '[subtablerow]',CONCAT('[row num="',proffv.profileid,'"]',proffv.value),'[/subtablerow]') FROM cf_profiles_fields_values proffv LEFT JOIN cf_profiles_fields proff ON proffv.fieldid=proff.id LEFT JOIN cf_profiles prof ON prof.id=proffv.profileid WHERE proff.id='2') AS 'profile_last_name' , (SELECT GROUP_CONCAT(DISTINCT '[subtablerow]',CONCAT('[row num="',proffv.profileid,'"]',proffv.value),'[/subtablerow]') FROM cf_profiles_fields_values proffv LEFT JOIN cf_profiles_fields proff ON proffv.fieldid=proff.id LEFT JOIN cf_profiles prof ON prof.id=proffv.profileid WHERE proff.id='3') AS 'profile_e-mail_address' , (SELECT GROUP_CONCAT(DISTINCT '[subtablerow]',CONCAT('[row num="',proffv.profileid,'"]',proffv.value),'[/subtablerow]') FROM cf_profiles_fields_values proffv LEFT JOIN cf_profiles_fields proff ON proffv.fieldid=proff.id LEFT JOIN cf_profiles prof ON prof.id=proffv.profileid WHERE proff.id='4') AS 'profile_phone_-_office' , (SELECT GROUP_CONCAT(DISTINCT '[subtablerow]',CONCAT('[row num="',proffv.profileid,'"]',proffv.value),'[/subtablerow]') FROM cf_profiles_fields_values proffv LEFT JOIN cf_profiles_fields proff ON proffv.fieldid=proff.id LEFT JOIN cf_profiles prof ON prof.id=proffv.profileid WHERE proff.id='6') AS 'profile_fax' , (SELECT GROUP_CONCAT(DISTINCT '[subtablerow]',CONCAT('[row num="',proffv.profileid,'"]',proffv.value),'[/subtablerow]') FROM cf_profiles_fields_values proffv LEFT JOIN cf_profiles_fields proff ON proffv.fieldid=proff.id LEFT JOIN cf_profiles prof ON prof.id=proffv.profileid WHERE proff.id='7') AS 'profile_password' , (SELECT GROUP_CONCAT(DISTINCT '[subtablerow]',CONCAT('[row num="',proffv.profileid,'"]',proffv.value),'[/subtablerow]') FROM cf_profiles_fields_values proffv LEFT JOIN cf_profiles_fields proff ON proffv.fieldid=proff.id LEFT JOIN cf_profiles prof ON prof.id=proffv.profileid WHERE proff.id='9') AS 'profile_phone_-_cell' , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=9 AND cfv.memberid=core.id) AS bicycles_build_material , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=10 AND cfv.memberid=core.id) AS bicycles_color , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=7 AND cfv.memberid=core.id) AS bicycles_frame_size , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=8 AND cfv.memberid=core.id) AS bicycles_wheel_size , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=4 AND cfv.memberid=core.id) AS cars_exterior_color , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=5 AND cfv.memberid=core.id) AS cars_interior_color , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=18 AND cfv.memberid=core.id) AS cars_interior_color , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=17 AND cfv.memberid=core.id) AS cars_license , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=1 AND cfv.memberid=core.id) AS cars_make , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=2 AND cfv.memberid=core.id) AS cars_model , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=14 AND cfv.memberid=core.id) AS cars_picture , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=6 AND cfv.memberid=core.id) AS cars_upholstery_material , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=15 AND cfv.memberid=core.id) AS cars_vehicle_history , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=16 AND cfv.memberid=core.id) AS cars_vin , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=3 AND cfv.memberid=core.id) AS cars_year , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=21 AND cfv.memberid=core.id) AS contact_info_email_address , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=20 AND cfv.memberid=core.id) AS contact_info_fax , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=19 AND cfv.memberid=core.id) AS contact_info_phone , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=22 AND cfv.memberid=core.id) AS contact_info_url , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=13 AND cfv.memberid=core.id) AS strollers_height , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=11 AND cfv.memberid=core.id) AS strollers_seats , (SELECT GROUP_CONCAT(IFNULL(cfv.value,'test') ) FROM cf_customfield_values cfv WHERE fieldid=12 AND cfv.memberid=core.id) AS strollers_wheels FROM cf_members core LEFT JOIN cf_members pregi ON pregi.id=core.id