2012-07-24 2 views
2

내 테이블의 구조 Result of a queryMySQL의 GROUP_CONCAT 등의 여러 필드 및 사용자 정의하기 위해 여기

SELECT parcel.TrackCode, parcelType.Name, GROUP_CONCAT(track.DateTime SEPARATOR '|') AS dt 
FROM track 
JOIN parcel ON track.ParcelID = parcel.ID 
JOIN parcelType ON parcel.ParcelTypeID = parcelType.ID 
JOIN event ON track.EventID = event.ID 
GROUP BY parcel.ID; 

결과는 다음과 같습니다 :

여기

내가 뭘하려

Result

는 그래서 문제는 여러 분야 (date where track.eventID = 3, date where track.eventID = 1는, date where track.eventID = 5date where track.eventID = 7 # 패턴이 3|1|5|7 것을 고려)에 데이터를 분할() GROUP_CONCAT을 필요로한다는 것입니다. 어떤 아이디어?

+1

의 손질 버전은 항상 사용자가 볼 필요 단지 3 이벤트가 있습니까입니까? –

+0

아니요, 패턴은 3 | 2 | 5 | 4 | 1 | 7이 될 수 있습니다. 이 패턴을보다 명확하게 만들기 위해 두 번째 패턴 예제를 변경했습니다. 감사. – mintobit

+0

어. 패턴에 최대 개수의 항목이 있습니까? –

답변

1

두 개의 쿼리를 실행하는 것이 좋습니다. 먼저이 하나, 관련 이벤트를 얻을 :이 쿼리의

SELECT ParcelID, EventID, DateTime 
FROM track 
WHERE EventID IN(1, 2, 4) 

스토어 결과를 키가 소포 ID이고 값이 다른 배열 이벤트의 배열에 소포 ID의지도에. 해당 내부 배열에서 키는 이벤트 ID이고 값은 이벤트 날짜입니다. 그런 다음

array(1 => array(
     2 => '2012-05-15 15:33:00', 
     4 => '2012-05-22 11:35:41', 
     1 => '2012-05-04 18:58:30' 
    ), 
    2 => array(
     2 => '2012-07-01 09:05:56', 
     4 => '2012-07-14 13:32:00', 
     1 => '2012-06-27 12:44:32' 
    ) 
); 

은 소포의 목록을 얻으려면이 다음과 같은 쿼리를 사용하고, 각각에 대해, 당신은 쉽게 그 각각의 날짜를 알아 내기 위해 이전 쿼리의 결과를 메모리에 볼 수 모든 소포 ID에 대한 이벤트.

SELECT parcel.ID, parcel.TrackCode, parceltype.Name 
FROM parcel 
JOIN parceltype ON parceltype.ID = parcel.ParcelTypeID 

참고 :이 대답은 conversation that took place in the MySQL chat room

0

ID를 원한다면 GROUP_CONCAT 트랙에서 ID를 가져와야합니다. ID는 동일한 순서로 지정됩니다.

또는 검색어 끝에 ORDER BY를 설정하면 해당 데이터도 조작됩니다.

+0

나는 EventIDs가 필요 없지만 한 행에 EventIDs에 따라 날짜가 필요하고'4 | 2 | 1 | 5'와 같은 사용자 지정 순서 패턴이 필요하다. ('Date WHERE EventId = 4 | Date WHERE EventId = 2 | Date 어디서 EventId = 1 | Date WHERE EventId = 5')) – mintobit