Mysql通过比较对行进行排序

Mysql通过比较对行进行排序,mysql,sorting,sql-order-by,Mysql,Sorting,Sql Order By,我有一张有运动队排名的表格,有一列“积分”(每赢一场*3+每平一场) 我将表格按点排序,然后按直接匹配排序现在让我们假设“B”战胜了“A”,所以A应该排在第一位。我该怎么做? 这是我的桌子 CREATE TABLE IF NOT EXISTS `games` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `hometeam` int(11) NOT NULL, `awayteam` int(11) NOT NULL, `won`

我有一张有运动队排名的表格,有一列“积分”(每赢一场*3+每平一场)

我将表格按点排序,然后按直接匹配排序现在让我们假设“B”战胜了“A”,所以A应该排在第一位。我该怎么做?

这是我的桌子

CREATE TABLE IF NOT EXISTS `games` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `hometeam` int(11) NOT NULL,
  `awayteam` int(11) NOT NULL,
  `won` enum('home','away','tie') DEFAULT NULL,
  `home_score` tinyint(3) unsigned DEFAULT NULL,
  `away_score` tinyint(3) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `teams` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
我的排名表是这样的:

SELECT 
    tt.name
    ,(SELECT COUNT(*) FROM games tg WHERE (tt.id = tg.hometeam OR tt.id = tg.awayteam) AND tg.won IS NOT NULL) as `games_played`
    ,(SELECT COUNT(*) FROM games tg WHERE (tt.id = tg.hometeam AND tg.won = "home") OR (tt.id = tg.awayteam AND tg.won = "away")) as `games_won`
    ,(SELECT COUNT(*) FROM games tg WHERE (tt.id = tg.hometeam AND tg.won = "away") OR (tt.id = tg.awayteam AND tg.won = "home")) as `games_lost`
    ,(SELECT COUNT(*) FROM games tg WHERE (tt.id = tg.hometeam OR tt.id = tg.awayteam) AND tg.won = "tied") as `games_tied`
    ,(SELECT `games_won`*3 + `games_tied`) AS `points`
FROM
    teams tt
ORDER BY `points` DESC

你会如何处理这个案子:A赢B赢,B赢C赢,C赢A?我想你的计划有一个根本性的错误plan@Psi考虑到“最新胜利”更为重要,可以根据日期进行。然而,在这种情况下,我也会做一些不同的事情,这使得它更容易:跟踪上次更改的时间戳。然后,如果两队人数相等,已经排名第一的球队仍然保持第一。如果排序条件#2无法决定,则将使用排序条件#3(例如玩的游戏更少,允许的分数更少等):)
SELECT 
    tt.name
    ,(SELECT COUNT(*) FROM games tg WHERE (tt.id = tg.hometeam OR tt.id = tg.awayteam) AND tg.won IS NOT NULL) as `games_played`
    ,(SELECT COUNT(*) FROM games tg WHERE (tt.id = tg.hometeam AND tg.won = "home") OR (tt.id = tg.awayteam AND tg.won = "away")) as `games_won`
    ,(SELECT COUNT(*) FROM games tg WHERE (tt.id = tg.hometeam AND tg.won = "away") OR (tt.id = tg.awayteam AND tg.won = "home")) as `games_lost`
    ,(SELECT COUNT(*) FROM games tg WHERE (tt.id = tg.hometeam OR tt.id = tg.awayteam) AND tg.won = "tied") as `games_tied`
    ,(SELECT `games_won`*3 + `games_tied`) AS `points`
FROM
    teams tt
ORDER BY `points` DESC