2012-06-07 2 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 в запросе и простое соединение в другом. Это может привести к разным результатам, поскольку LEFT JOIN также рассматривает записи, которые не имеют соответствия в другой таблице.

+0

Извините меня в каждом случае, я тестирую с помощью JOIN Я допустил ошибку в своем сообщении Спасибо – Flex60460

0

Я нашел решение. Действительно, если значение null, запись игнорируется, поэтому я использую функцию COALESCE для ее решения!

Смежные вопросы