Проблема группового запроса - PullRequest
1 голос
/ 27 апреля 2011

Я знаю, что это может быть невозможно ответить, но я пытаюсь выяснить, почему запрос возвращает 0 результатов.

SELECT SQL_CALC_FOUND_ROWS 
  records.instance_id
  ,instances.patient_id
  ,form_1_data.field_1 AS field_0
  ,form_1_data.field_2 AS field_1
  ,records.field_240 AS field_2
  ,**GROUP_CONCAT(events.start_time SEPARATOR '<br />')**  AS field_3 
FROM form_4_data AS records 
LEFT JOIN instances ON instances.id= records.instance_id 
LEFT JOIN events ON records.instance_id = events.instance_id  
LEFT JOIN form_3_data ON records.field_111= form_3_data.instance_id  
LEFT JOIN form_1_data ON form_3_data.field_94= form_1_data.instance_id 
WHERE instances.active=1  
ORDER BY records.instance_id DESC  
LIMIT 25,25

возвращает 0 результатов.

Но,

SELECT SQL_CALC_FOUND_ROWS 
  records.instance_id
  ,instances.patient_id
  ,form_1_data.field_1 AS field_0
  ,form_1_data.field_2 AS field_1
  ,records.field_240 AS field_2
  ,**events.start_time AS field_3** 
FROM form_4_data AS records 
LEFT JOIN instances  ON instances.id= records.instance_id 
LEFT JOIN events ON records.instance_id = events.instance_id  
LEFT JOIN form_3_data ON records.field_111= form_3_data.instance_id  
LEFT JOIN form_1_data ON form_3_data.field_94= form_1_data.instance_id 
WHERE instances.active = 1  
ORDER BY records.instance_id DESC  
LIMIT 25,25

возвращается:

instance_id patient_id  field_0  field_1  field_2   field_3
83          40          Jack     Nichols  NULL      2011-04-11 20:00:00
60          8           Olive    Miller   Split     NULL
58          32          Mark     Green    NPSG      2011-03-05 20:00:00
58          32          Mark     Green    NPSG      2011-04-09 20:00:00
58          32          Mark     Green    NPSG      2011-04-02 20:00:00
58          32          Mark     Green    NPSG      2011-04-09 20:00:00
57          32          Mark     Green    MSLT      NULL
56          43          Jeremy   Stevens  NPSG      NULL
31          32          Mark     Green    MWT       2011-04-14 20:00:00
28          29          Jerry    Jones    NULL      2011-04-01 20:00:00
28          29          Jerry    Jones    NULL      2011-04-02 20:00:00
28          29          Jerry    Jones    NULL      2011-03-30 20:00:00
28          29          Jerry    Jones    NULL      2011-04-01 20:00:00
28          29          Jerry    Jones    NULL      2011-04-14 20:00:00
11           8          Olive    Miller   Split     2011-03-11 20:00:00
11           8          Olive    Miller   Split     2011-03-30 20:00:00
11           8          Olive    Miller   Split     2011-03-22 20:00:00
11           8          Olive    Miller   Split     2011-04-06 20:00:00
11           8          Olive    Miller   Split     2011-04-16 20:00:00
11           8          Olive    Miller   Split     2011-03-31 20:00:00
11           8          Olive    Miller   Split     2011-04-02 20:00:00
11           8          Olive    Miller   Split     2011-04-03 20:00:00
9            8          Olive    Miller   NPSG      2011-04-22 20:00:00
9            8          Olive    Miller   NPSG      2011-03-29 20:00:00
9            8          Olive    Miller   NPSG      2011-03-29 20:00:00

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

group_concat не работает, потому что в вашем запросе нет условия group by.
Добавьте group by, и оно будет работать.

SELECT SQL_CALC_FOUND_ROWS 
  records.instance_id
  ,instances.patient_id
  ,form_1_data.field_1 AS field_0
  ,form_1_data.field_2 AS field_1
  ,records.field_240 AS field_2
GROUP_CONCAT(events.start_time SEPARATOR '<br />')  AS field_3
FROM form_4_data AS records 
LEFT JOIN instances ON instances.id= records.instance_id 
LEFT JOIN events ON records.instance_id = events.instance_id  
LEFT JOIN form_3_data ON records.field_111= form_3_data.instance_id  
LEFT JOIN form_1_data ON form_3_data.field_94= form_1_data.instance_id 
WHERE instances.active=1  
GROUP BY records.instance_id /*<<-- addition */
ORDER BY records.instance_id DESC  
LIMIT 25,25 
0 голосов
/ 27 апреля 2011

Если вы пытаетесь просто добавить новую строку к вашей дате, тогда GROUP_CONCAT - это не то, что вам действительно нужно. Это агрегатная функция, работающая вместе с GROUP BY для объединения строк из разных строк в объединенном блоке.

Если у нас есть столовые недели:

week weekday
1    Monday
1    Tuesday
1    Friday
2    Monday
2    Sunday

запрос

SELECT week, GROUP_CONCAT( weekday SEPARATOR '<br />' ) as days
FROM weeks
GROUP BY week

даст вам:

week days
1    Monday<br />Tuesday<br />Friday
2    Monday<br />Sunday

Я считаю, что вы ищете простой КОНКАТ:

SELECT week, CONCAT( weekday,'<br />' ) as day
FROM weeks

даст вам:

week day
1    Monday<br />
1    Tuesday<br />
1    Friday<br />
2    Monday<br />
2    Sunday<br />
...