目前我有3个值,我需要排序,按照以下顺序:gameDate,某列保证插入顺序,团队得分。创建一个非自动增量排序键
显然,第二个排序参数作为唯一键,第三个排序参数将被忽略。因此,而不是分类,比方说,比赛结果PK ID,在生产应用程序,我创建了一个“之类的”列存储非唯一增加的值(见下面的查询结果),然后允许
SORT BY gameDate, sort, total DESC
凡总排序给我的殊荣(或扎-ING)全队第一,所以我不必
if(teamA.total >= teamB.total) // show winner on left, loser on right
在应用层生成每周游戏报告。
因此,为了让我的分拣蛋糕,而不是维护一个中间排序的列,似乎日期时间或时间戳可以做的伎俩;然而,问题在于我需要在插入日期非唯一地进行排序(两个参与者团队结果行的日期值必须相同),否则,它与排序游戏结果PK id相同,第3个排序列将会被忽略。
为什么我需要这样做?要求是最近的游戏结果应该在任何给定的游戏日期最后显示(根据gameDate,PK id进行排序),而我自己的要求是第三列排序总数是可达的(这也是不可能的作为第二排序参数的唯一键列)。
大概连现在这是明确的泥;-)
ORIGINAL
我有需要显示在报告中,通过比赛日期排序游戏结果的列表,然后是固定的排序顺序(即不能根据游戏ID排序,因为最近显示的游戏必须最后显示在报告中的每个日期),最后通过赢得团队评分。
在当前版本的应用程序中,我使用了一个int排序列,它在游戏结果提交中被查询,然后为db插入操作增加1。最终结果是我可以运行如下查询:
SELECT id, gameID, gameDate, teamID, total, sort
FROM games
ORDER BY gameDate, sort, total desc
+----+--------+------------+--------+-------+------+
| id | gameID | gameDate | teamID | total | sort |
+----+--------+------------+--------+-------+------+
| 1 | 3 | 2011-12-01 | 798 | 6 | 161 |
| 2 | 3 | 2011-12-01 | 106 | 3 | 161 |
| 3 | 4 | 2011-12-01 | 78 | 8 | 162 |
| 4 | 4 | 2011-12-01 | 106 | 7 | 162 |
| 5 | 5 | 2011-12-04 | 106 | 4 | 163 |
| 6 | 5 | 2011-12-04 | 167 | 3 | 163 |
+----+--------+------------+--------+-------+------+
但是,我宁愿不处理维护排序列。是的,我可以通过gameDate进行排序,然后在查询中通过游戏结果ID PK进行排序,并确定应用层中的胜出团队排序,做一个if(teamA.total >= teamB.total) ....
,但这也很难看;-)
我在想也许日期时间或时间戳(如果允许非唯一的)可能会诀窍。据我所知,由于MySQL没有处理微秒,因此有点冒险,所以同时提交2个不同游戏结果的问题是可能的(这可能导致游戏报告显示不正确)。
无论如何,底线是,我需要找到一种方法,通过比赛日期排序和保持插入顺序,所以我可以在球队的得分游戏(即由获胜的球队排序)最后的排序子句。
想法表示赞赏
感谢
从我的评论
对不起,我不明白你为什么需要排序列开始。您可以使用时间戳来存储和维护输入日期和排序顺序,您的主键可以是('gameID','teamID') – ajacian81
为什么你不想使用自动增量? – Kamil
@Kamil,因为我需要最终的胜利队;如果我按照gameDate排序,接着是游戏表自动增量PK(有一个id列,没有在查询中显示),那么将无法对球队得分排序 – virtualeyes