2011-05-01 2 views
0

저는 PHP/mysql에 다소 익숙하기 때문에 뭔가 빠졌습니다. 이 접근법은 아마도 최선이 아닙니다.Group_Concat을 사용하여 주문하기 까다로운 증명하기

나는이 다음 표

테이블 : unit_members 분야 : 아이디, unit_id, person_id로, 차

표 : 명 필드 : ID, 이름, rank_id

표가 : 필드 위 : ID, 이름, 등급

표 : 단위 필드 : ID, 이름, 등급

저는 각 단위와 각 단위의 사람을 표시하려고하고 인계 필드 인 계급별로 사람을 정렬하려고합니다. 그것은 단순 해 보이지만, 나는 사람들이 계급에 의해 명령받을 수 없습니다. 랜 크.

'SELECT unit_members.person_id, GROUP_CONCAT(persons.id) as personid, 
     GROUP_CONCAT(persons.name) as name, persons.rank_id, unit_members.unit_id, 
     units.id as unitid, units.name as unit, 
     GROUP_CONCAT(DISTINCT units.codename) as squad, ranks.id as rankid, 
     GROUP_CONCAT(ranks.rank) as rankrank 
FROM unit_members, ranks, persons, units 
where persons.rank_id = ranks.id 
    and units.id = unit_members.unit_id 
    and persons.id = unit_members.person_id 
group by units.codename 
ORDER BY units.rank asc, ranks.rank asc'; 

내 생각 엔 내가 그것을 배열로 전환하기 전에 어떻게 든 GROUP_CONCAT를 주문해야하므로 여기에 의한 주문의 GROUP_CONCAT에 영향을주지 않습니다 나에게 나타납니다

여기 내 쿼리입니다. 이 배열은 사람 ID로 주문한 것 같습니다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

{} 버튼을 사용하여 코드의 서식을 지정하십시오. –

답변

0

나는 오해가있을 것이라고 생각합니다.

ORDER BYGROUP_CONCAT()의 결과에 영향을 미치지 않습니다. 괄호 안에 주문을 지정하면 change the order of results in a GROUP_CONCAT() function 수 있습니다.

귀하의 질의는 unit.codename을 기준으로 그룹화되며 각 unit.codename에서 임의의 결과가 먼저 units.rank에 의해 정렬 된 다음 ranks.rank에 의해 정렬됩니다.

큰 문제는 배열에 대해 계속 이야기하는 것입니다. 배열이 없습니다.

+0

답변 해 주셔서 감사합니다. 나는 그것을 오늘 밤 나중에 시험 할 것이다. 배열에 대해 언급 할 때 GROUP_CONCAT을 사용하여 내가 무엇을하고 있는지 언급하지 못했습니다. 다음을 잠시 사용하고 있습니다 : $ name = $ row [ 'name']; $ members_array = 폭발 (",", $ 이름); 그래서 그 GROUP_CONCAT의 내용을 쉽게 목록에 넣을 수 있습니다. 그게 최선의 방법인지 확실하지 않습니다. – user732907

+0

사실 나는 그것을 일찍 시도 할 기회가 있었지만 효과가 없었습니다. 나는 무엇을 잘못 했는가? '부호' $ roster_query = '이름 personid, GROUP_CONCAT (ranks.rank 내림차순 의해 persons.name 순서), 같이 GROUP_CONCAT (ranks.rank 내림차순 의해 persons.id 순서) unit_members.person_id SELECT ... 'code' 등 – user732907

+0

질문을 편집하여 일부 샘플 데이터와 원하는 결과를 포함 시키십시오. 4 개의 테이블 각각에 대해 약간의 샘플 데이터를 제공해야합니다. –