그래서 테이블이 두 개 있습니다 : -char (플레이어에 대한 정보를 유지) -special (상위 mobs에 대한 계급이므로이 테이블의 각 줄은 모든MySQL - 어떤 JOIN을 사용해야합니까? 2 테이블, 회원 수가 동일하지 않습니다
##################
## table char: ##
#################
`char_id` - int(12) auto increment - primary key
`type` - varchar(18)
`color` - varchar(16)
---------------------------------------------------
#####################
## table special: ##
#####################
`id` - auto increment - primary key - just for keeping a number of events
`name` - varchar(24)
`time` - int(12) - the time the char's spent to kill the mob
`member1_id`- here is the char_id, it goes from 1 to 20 (until member20_id)
its a int(12), default is '0', so if there's only 3 members i would have something like:
`member1_id` = 1111111
`member2_id` = 2222222
`member3_id` = 1113123
`member4_id` = 0 (same for the rest)
---------------------------------------------------
내가 member1_id에서 모든 문자를 표시하려면, member2_id, memberN_id은 (알림 : 군중과 총 시간)
여기에 내가 쓴 요약입니다 죽인 플레이어 일부 값은 MEMBER_ID에 0이 플레이어가 없으므로 표시 할 데이터가 없음) 및 시간별 주문
여기 예제 :
Mob rank:
1 - Name: XYZ Guild - Time: 3 minutes
Member 1: 1111111 - Type: soldier - Color: blue
Member 2: 2222222 - Type: soldier - Color: red
2- Name: The FOO Guild - Time: 19 minutes
Member 1: 238381 - Type: Noob - Color: green
Member 2: 4444444 - Type: soldier - Color: red
Member 3: 549595 - Type: soldier - Color: green
MEMBER_ID는 순서의 시간에 의해도 0이 어디서 난 단지에서 데이터를 얻을 수있는 방법의 혼란처럼, 내가 사용해야 메신저 종류의 가입 유형에 대한 중요한 것은 자신을 특별
고맙습니다.
그럼 LEFT JOIN을 사용하겠습니까? 스크립트를 만들 수는 있지만 같은 ID에 대해 전체 special_members를 검색해야하기 때문에 비용이 많이 들거나 느려지지 않을 것입니다. –
정규화 된 구조를 사용하면 세 개의 테이블 (char, special, special_members)과 INNER JOIN (또는 단순한 JOIN)을 모두 연결하여 사용할 수 있습니다. 이것은 가장 쉽고 빠르며 가장 올바른 방법입니다. JOINed 필드에 인덱스가있는 한 빨리 처리 할 수 있습니다. 정규화하지 않으면 여전히 두 테이블간에 INNER JOIN을 사용하지만 쿼리를 20 번 반복해야합니다. 다른 테이블을 추가하면 21 번, 다른 테이블을 추가하면 22 번 반복해야합니다. UNION을 사용하여 20 개의 쿼리를 하나로 분리합니다. 또한 0 대신 NULL을 사용해야합니다. –