2010-09-06 8 views
2

Привет как я группировать эти данные:MySql Group By вопрос

**Date** **Day** **DURATION** **IDSTAFF** 

21-09-2010 Sun  AM   1 
22-09-2010 Mon  AM   1 
21-09-2010 Sun  PM   2 
22-09-2010 Mon  PM   2 

Так он станет, как это?

**Date** **Day** **DURATION** **IDSTAFF** 

21-09-2010 Sun  AM   1 (am),2 (pm) 
22-09-2010 Mon  AM   1 (am),2 (pm) 

Использование группы sql будет отображаться только одним персоналом. Может ли sql-запрос решить эту проблему или использовать php?

ответ

0

Правильный ответ на этот вопрос:

SELECT DATE, DAY, GROUP_CONCAT(IDSTAFF, ' (' , PERIOD , ')' SEPARATOR ', ') AS PERSONNAME FROM LEAVERECORD GROUP BY DATE 

Если вы хотите, чтобы получить имя для каждого idstaff, использовать подзапрос в GROUP_CONCAT и CONCAT в FirstName и Фамилия. Пример:

SELECT DATE, DAY, PERIOD, GROUP_CONCAT((SELECT CONCAT(FIRSTNAME,' ',LASTNAME) from STAFF where STAFF.IDSTAFFTABLE=IDSTAFF), ' (' , PERIOD , ')' SEPARATOR ', ') AS PERSONNAME FROM LEAVERECORD GROUP BY DATE 

Результат:

alt text

4

Использование GROUP_CONCAT():

SELECT Date, Day, Duration group_concat(IdStaff + '(' + Duration + ')' SEPARATOR ',') 
from yourtable 
group by Date, Day, Duration 
+0

(IdStaff + '(' + Длительность + ')' не работает, например IdStaff равно 4 и продолжительность равна 1, то выход будет. be 5 not 4 (1). Поэтому, если IdStaff равен 4, а Duration - AM, выход равен 4. Как это решить? – cyberfly