【发布时间】:2010-11-10 21:47:49
【问题描述】:
首先..这是我创建的两个表(没有不相关的列)..
CREATE TABLE users_history1 (
circuit tinyint(1) unsigned NOT NULL default '0',
userh_season smallint(4) unsigned NOT NULL default '0',
userh_userid int(11) unsigned NOT NULL default '0',
userh_rank varchar(2) NOT NULL default 'D',
userh_wins int(11) NOT NULL default '0',
userh_losses int(11) NOT NULL default '0',
userh_points int(11) NOT NULL default '1000',
KEY (circuit, userh_userid),
KEY (userh_season)
) ENGINE=MyISAM;
CREATE TABLE users_ladders1 (
circuit tinyint(1) unsigned NOT NULL default '0',
userl_userid int(11) unsigned NOT NULL default '0',
userl_rank char(2) NOT NULL default 'D',
userl_wins smallint(3) NOT NULL default '0',
userl_losses smallint(3) NOT NULL default '0',
userl_points smallint(4) unsigned NOT NULL default '1000',
PRIMARY KEY (circuit, userl_userid),
KEY (userl_userid)
) ENGINE=MyISAM;
一些背景知识.. 这些表格包含竞争天梯的数据,在该天梯上,玩家在按积分排序的积分榜上进行比较。 users_history1 是一个表,其中包含以前季节存储的记录。 users_ladders1 包含当前季节的记录。我正在尝试在我的网站上创建一个页面,在该页面上,玩家根据他们以前的记录和当前记录的平均分进行排名。以下是 1v1 天梯的主要排名: http://vilegaming.com/league.x/standings1/3
我想从两个表中的数据库中选择一个有序列表玩家,这取决于他们从 users_ladders1 和 users_history1 记录中的平均分。我真的不知道如何在一个查询中从两个表中进行选择,但我会尝试尽可能通用地说明它..
在整个示例中使用连字符,因为 SO 会使它变得很奇怪。
SELECT userh-points
FROM users-history1
GROUP BY userh-userid
ORDER BY (total userh-points for the user)
需要 GROUP BY,因为有些球员可能已经参加过多个赛季。
SELECT userl-points
FROM users-ladders1
ORDER BY userl-points
我希望能够在一个查询中组合这两个表,这样我就可以获得按总分排序的行形式的数据,如果可能的话,还可以将总分除以玩家的唯一记录数,这样我就可以取平均值。
【问题讨论】: