2010-07-25 42 views
1

我有四個表:查詢多表

  • 字符
  • arena_team
  • arena_table_member
  • arena_team_stats。

字符的表已GUID,可名

arena_team表已經arenateamid,名稱,類型

arena_table_member表已經guid的(這是與在字符的表),arenateamid

arena_team_stats表hasnatenamid,rating,wins,wins2,playing

如何獲得角色所在的競技場隊伍名單?我嘗試過:

$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表中的所有競技場球隊。

回答

1

看起來你缺少JOIN。它更容易與表的別名和格式化閱讀:

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 
3

您應該使用連接代替。在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.name像'%?%'將返回所有的c.names有一個?在他們中。

0
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 

您是丟失了一些表連接。