0

group_concat を使用して、xml 出力をより迅速に作成しようとしています。従来のクエリではレコード番号が異なります。実際、クエリでグループ連結を使用すると、レコードが少なくなります。

    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

助けてくれてありがとう

4

3 に答える 3

2

マニュアルに記載されているように:

結果は、システム変数によって指定された最大長に切り捨てられgroup_concat_max_lenます。デフォルト値は1024です。戻り値の有効な最大長は、の値によって制約されますが、値を高く設定できますmax_allowed_packetgroup_concat_max_len実行時にの値を変更する構文は次のとおりです。ここvalで、は符号なし整数です。

SET [GLOBAL | SESSION] group_concat_max_len = val ;
于 2012-06-07T14:43:59.643 に答える
0

クエリで LEFT JOIN を使用し、他のクエリで単純な JOIN を使用しました。LEFT JOIN では他のテーブルに一致しないレコードも考慮されるため、異なる結果になる可能性があります。

于 2012-06-07T14:49:48.333 に答える
0

解決策を見つけました。実際、null 値の場合、レコードは無視されるので、COALESCE 関数を使用して解決します。

于 2012-06-08T05:02:28.383 に答える