2012-06-07 141 views
0

我尝试使用group_concat创建更快速的xml outpout。 传统查询的记录号不同。事实上,当我的查询使用组concat时,我的记录较少。GROUP_CONCAT奇怪的结果

SELECT GROUP_CONCAT(
    CONCAT('\n<p>\n', 
     CONCAT('\n<id>',paIndex,'</id>\n'), 
     CONCAT('<prInitiales>',prInitiales,'</prInitiales>\n'), 
     CONCAT('<paNomPren>',paNomPrenom,'\n',ttT_Traitement_P,'</paNomPren>\n'),         
     CONCAT('<ttTStatutP>',ttTStatutP,' - ',DATE_FORMAT(ttDateStatut,'%d/%m/%Y'),'\n',ttUserImportant,'</ttTStatutP>\n'), 
     CONCAT('<paDossier1>',paDossier1,'\n',paDossier2,'</paDossier1>\n'), 
     CONCAT('<paNumTel1>',paNumTel1,'\n',paNumTel2,'</paNumTel1>\n'), 
     CONCAT('<paNaissanceS>',DATE_FORMAT(paNaissance,'%d/%m/%Y'),'</paNaissanceS>\n'), 
    '</p>') ORDER BY paNomPrenom DESC) AS xml 
    FROM 20Patients_1012 
    JOIN 30Traitemnt_201223 ON 20Patients_1012.paIndex = 30Traitemnt_201223.ttIndex 
    JOIN 12Praticien_02 ON 30Traitemnt_201223.ttPraticien = 12Praticien_02.prIndex 

传统的查询:

SELECT 20Patients_1012.paIndex, 20Patients_1012.paNomPrenom, 20Patients_1012.paDossier1, 20Patients_1012.paDossier2, 20Patients_1012.paNaissance, 20Patients_1012.paNumTel1, 30Traitemnt_201223.ttTStatutP, 30Traitemnt_201223.ttDateStatut, 12Praticien_02.prInitiales 
FROM 20Patients_1012 
JOIN 30Traitemnt_201223 ON 20Patients_1012.paIndex = 30Traitemnt_201223.ttIndex 
JOIN 12Praticien_02 ON 30Traitemnt_201223.ttPraticien = 12Praticien_02.prIndex ORDER BY 20Patients_1012.paNomPrenom ASC 

感谢您的帮助

回答

2

the manual说:

结果被截断到由group_concat_max_len给出的最大长度系统变量,它有一个默认值1024.该值可以设置得更高,虽然有效返回值的最大长度受到max_allowed_packet的值的限制。语法改变group_concat_max_len在运行时的值如下所示,其中val是一个无符号的整数:

SET [GLOBAL | SESSION] group_concat_max_len = val;
0

您使用LEFT JOIN在查询和简单JOIN在其他。这可能会导致不同的结果,因为LEFT JOIN也会考虑其他表中没有匹配的记录。

+0

对不起,在每一种情况下,我用JOIN测试我在我的帖子中犯了一个错误谢谢 – Flex60460

0

我找到了解决方案。 确实如果空值,记录被忽略,所以我用,COALESCE函数来解决!