문제

4 개의 테이블이 있습니다 :

  • 문자
  • arena_team
  • arena_table_member
  • arena_team_stats.

문자 테이블에는 GUID, name

arena_team 테이블에는 ArenateamID, 이름, 유형

가 있습니다.

arena_table_member 테이블에는 GUID가 있습니다 (이것은 문자 테이블과 동일합니다), arenateamid

ARENA_TEAM_STATS 테이블에는 ARENATEAMID, 등급, WINS, WINS2, 재생

캐릭터가있는 경기장 팀 목록은 어떻게 얻을 수 있습니까?나는 시도했다 :

$result=mysql_query("SELECT 
          characters.guid
           , characters.name
           , arena_team.arenateamid
           , arena_team.name
           , arena_team_stats.rating
           , arena_team_stats.wins
           , arena_team_stats.wins2
           , arena_team_stats.played
           , arena_team.type 
   FROM characters
           , arena_team_stats
           , arena_team 
    WHERE characters.name LIKE '%$q%' 
    AND arena_team.arenateamid = arena_team_stats.arenateamid 
    ORDER BY arena_team_stats.rating DESC") 
or die(mysql_error());
.

그러나 ARENA_TEAM 테이블에있는 모든 경기장 팀을 반환합니다.

도움이 되었습니까?

해결책

가입이없는 것처럼 보입니다.테이블 별칭으로 읽는 것이 더 쉽고 형식이 지정됩니다.

    SELECT c.guid
         , c.name
         , at.arenateamid
         , at.name
         , at.type
         , ats.rating
         , ats.wins
         , ats.wins2 
         , ats.played
      FROM characters c
INNER JOIN arena_team_member atm ON atm.guid = c.guid
INNER JOIN arena_team at ON at.arenateamid = atm.arenateamid
INNER JOIN arena_team_stats ats ON ats.arenateamid = at.arenateamid
     WHERE c.name LIKE '%$q%'
  ORDER BY ats.rating DESC
.

다른 팁

대신 조인을 사용해야합니다.From 부분에서 쉼표로 구분 된 테이블을 사용하면 결과에서 모든 가능한 조합을 얻을 수 있습니다.

이 쿼리를 시도하십시오 (조인 사용) :

SELECT c.guid,c.name,a.arenateamid,a.name,
  ts.rating,ts.wins,ts.wins2,
  ts.played,a.type 
 FROM characters c
         JOIN arena_table_member ON arena_table_member.guid=character.guid
  JOIN arena_team a ON arena_table_member.arenateamid = a.arenateamid
  JOIN arena_team_stats ts ON ts.arenateamid = a.arenateamid
 WHERE c.name LIKE '%$q%' 
  AND a.arenateamid = ts.arenateamid 
 ORDER BY ts.rating DESC
.

두 가지 :

  1. 여기에 별칭을 사용해야합니다.(전체 테이블 이름 대신 C, A, TS는 별칭이라고합니다)

  2. 문자 '?'와 정확하게 정확하게 일치 시키려면 c.name= '?'를 사용하십시오.C. 이름은 '%? %'와 같은 모든 C.Names를 반환합니다.그들 안에.

SELECT Char.guid, Chars.name, Teams.arenateamid, Teams.name, Stats.rating,
       Stats.wins, Stats.wins2, Stats.played, Teams.type
FROM characters AS Chars,arena_team_stats AS Stats, arena_team AS Teams,
     arena_table_member AS Members
WHERE Chars.name LIKE '%$q%' AND Teams.arenateamid = Stats.arenateamid AND
      Members.guid = Chars.guid AND Members.arenateamid = Teams.arenateamid
ORDER BY Stats.rating DESC
.

몇 가지 테이블 조인이 누락되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top