2012-06-07 78 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函數來解決!