2010-09-06 67 views
2

嗨我如何组这样的数据:MySQL的集团通过问题

**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 group by将只显示一个id工作人员。 sql查询可以解决这个问题还是需要使用php?

回答

0

正确回答这个问题:

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

如果你想为每个idstaff获取名称,使用子查询的GROUP_CONCAT和CONCAT名字和姓。例如:

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时,输出将。是5而不是4(1),所以如果IdStaff是4并且持续时间是AM,则输出是4.如何解决这个问题? – cyberfly 2010-09-08 01:48:01