查询问题

时间:2010-09-20 19:23:34

标签: sql mysql

我有四张桌子:

  • 字符
    • GUID
    • 名称
    • 性别
    • 种族
    • 在线
  • character_arena_stats
    • GUID
    • personal_rating
    • matchmaker_rating
  • arena_team_member
    • arenateamid
    • played_season
    • played_week
    • wons_season
    • wons_week
  • arena_team
    • arenateamid
    • captain_guid

我需要获得角色详情(比赛,班级,姓名,性别,在线)和团队信息(personal_rating,matchmaker_rating,playing_season,playing_week,wons_season,wons_week,captain_guid),但无法使其正常运行。我的疑问是:

$result=mysql_query("SELECT 
            c.guid,
            c.name,
            c.gender,
            c.class,
            c.online,
            c.race,
            atm.guid,
            atm.played_season,
            atm.played_week,
            atm.wons_season,
            atm.wons_week,
            atm.arenateamid,
            cas.personal_rating,
            cas.guid,
            cas.matchmaker_rating,
            at.arenateamid,
            at.captainguid
         FROM
         character_arena_stats cas,
         arena_team_member atm,
         characters c,
         arena_team at
         WHERE c.guid = cas.guid AND atm.arenateamid = ".$entry." AND at.arenateamid = ".$entry."");

它应该只返回其guid等于c.guid,cas.guid,atm,guid和其atm.arenateamid等于at.arenateamid的成员。 Insted,它返回了很多随机成员。

谢谢,对不起我的英语。

3 个答案:

答案 0 :(得分:1)

由于您未指定竞技场表中的记录应如何连接到字符表中的记录,因此您将获得一个交叉连接,它将返回字符记录的每个组合以及竞技场记录。

当你说“我想全部了解”时,你的意思是什么 ?找到查询的起点。例如:您是否正在寻找由团队组织的所有角色,以及他们的详细信息和竞技场统计数据?或者,对于每个角色,他们参加的所有团队?

更清楚地定义要求将有助于我们提出解决方案。 :)

更新:实际上,仔细阅读查询后,我相信我可以推断出您在寻找的内容:

SELECT 
            c.guid,
            c.name,
            c.gender,
            c.class,
            c.online,
            c.race,
            atm.guid
            atm.played_season,
            atm.played_week,
            atm.wons_season,
            atm.wons_week,
            atm.arenateamid,
            cas.personal_rating,
            cas.guid,
            cas.matchmaker_rating,
            at.arenateamid,
            at.captainguid
         FROM
         character_arena_stats cas,
         arena_team_member atm,
         characters c,
         arena_team at
         WHERE c.guid = cas.guid 
         and c.guid = atm.guid
         and atm.arenateamid = at.arenateamid
         AND at.arenateamid = ".$entry."

请注意,Arena Team和Character表现在基于团队队长的GUID加入 - 这将避免交叉连接(“随机行”)问题。此外,竞技场团队成员现已加入竞技场团队,并且仅根据团队表格检查过滤器参数。

不确定这会在不了解您的数据和要求的情况下准确提供您想要的内容 - 我相信提供给您的是每个团队队长的列表,他们的竞技场统计数据,以及他们的团队和团队成员的统计数据。希望这会让你前进。祝好运!

答案 1 :(得分:0)

呃,伙伴不确定你到底在那里,...懒得自己为你写一个查询,再看看dev.mysql.com refs应该是直截了当的。

也是你的 character_arena_stats 表,不应该有竞技场表格的参考吗?

  • guid
  • arena_id?
  • personal_rating
  • matchmaker_rating

see more here for normalization

答案 2 :(得分:0)

是的,我不确定你要做什么,但根据描述...

你的模型似乎完全没错,永远不会产生你想要的结果。例如,没有键将arena_team和arena_team_member绑定到字符和character_arena_stats。

其次,这个条件:

"WHERE c.guid = cas.guid AND atm.arenateamid = ".$entry." AND at.arenateamid = ".$entry);

对于此声明不正确:“它应该只返回成员... ,其atm.arenateamid等于at.arenateamid ”。

相反,它可以改写如下:

"WHERE c.guid = cas.guid AND atm.arenateamid = at.arenateamid AND atm.arenateamid = ".$entry);

尽管如此,由于上述原因,查询将永远不会返回预期结果,至少基于我对您帖子的理解。

SIDE注意:这是PHP代码,所以我不知道你为什么要把它标记为jQuery。

祝你好运,