2011-03-17 69 views
1

我正在创建照片排名系统。基本上,我有三个主要领域 - 赢得,输了,如何表演。如何查询获得连续排名?

比方说,我有三张照片

Photo Won Lost Played 
------------------------- 
A  3 2  5 
B  1 4  5 
C  3 2  5 

我会写一个查询来获取每个照片的排名。问题是,照片​​A和照片C有完全相同的记录。如何使照片A和C都返回1的查询?

Photo Won Lost Played Rank 
------------------------------- 
A  3 2  5  1 
C  3 2  5  1 
B  1 4  5  ? 

添加于11年3月17日

我已经所以现在我有“vote_ratio”字段,而不是“打出了”改变表结构有点

。 “vote_ratio”保存“vote_win”/“vote_lose”的值。

  1. 查询只“照片A”和获得它的排名:

    所以表必须我想要做什么修改为

    Photo Won Lost Ratio 
    A  3  2  1.5 
    B  1  4  0.25 
    C  3  2  1.5 
    

  2. 查询所有记录并显示每条记录的等级。

我可以通过以下查询来做#2。

"select * from table order by ratio desc" 

但还是有问题。照片A和C具有相同的比例。我需要让他们都排名第一。

+0

您的查询是在这个什么时刻? – bensiu 2011-03-17 00:43:04

+0

你能澄清你的意思是“返回1”吗?返回一行?为每一个返回一行?你的问题 – 2011-03-17 00:47:00

+0

不清楚。你的排名系统如何?什么是你的餐桌结构? – AbiusX 2011-03-17 00:47:32

回答

1

如果您的意思是“返回1”作为回报1的排名记录? - >没有测试,但是它可以GROUP BY的组合和GROUP_CONCAT这样的:

SELECT Won, Lost, Played, GROUP_CONCAT(photo, ', ') AS photos 
FROM your_table 
GROUP BY Won, Lost, Played 
1

没有测试

SELECT * 
FROM photos 
ORDER BY (played/lost) 

我认为它返回:

Photo A // rank1 
Photo C // rank1 
Photo B // rank2 
+0

因此,它的作品...? – 2011-03-17 07:10:17

+1

我认为你的意思是'ORDER BY(播放/丢失)DESC'。但是......如果没有损失呢? – 2011-03-17 08:46:11

+0

它仅适用于行集合。我需要通过它的id查询某一行然后获得它的排名。 – Moon 2011-03-17 23:39:58