2015-01-16 45 views
0

下面是我的代码的副本,我的主要目标是根据它的photo_id获得某些图像的排名。下面的代码工作得很好,但问题是,如果总分有联系,那么这两个图片的排名会相同。我真正想要的是,如果这些图像的总分相同,我想按日期对它们排序。我怎样才能做到这一点?没有重复排名

SELECT uo.*, 
    (SELECT COUNT(DISTINCT ui.total_points) 
    FROM photo_list ui 
      WHERE ui.total_points>= uo.total_points 
      ) AS rank 
    FROM photo_list uo 
    WHERE photo_id = :photo_id 

这里是我的表是什么样子:

id | photo_id | total_points | date 
1  432cfc  0   1403076412 
2  fsd324  1   1403076413 
3  gd43ds  0   1403076411 

这是我的愿望的结果:

rank | photo_id | total_points | date 
    1  fsd324  1   1403076413 
    2  gd43ds  0   1403076411 
    3  432cfc  0   1403076412 
+0

添加'ORDER BY total_points,date'.This应该工作。 –

+0

它不会试一试 –

+0

你能提供样品数据和DDL吗? –

回答

0
select * from (
    SELECT uo.*, 
    (SELECT COUNT(DISTINCT ui.total_points) 
    FROM photo_list ui 
    WHERE ui.total_points>= uo.total_points 
    ) AS rank 
    FROM photo_list uo 
    WHERE photo_id = :photo_id 
    ) as alias 
order by total_points,date; 
+0

不用工作 –

+0

你想用积分对它们进行排序,然后日期正确吗? @PimenterDgrc –

+0

是的,但你的代码没有工作 –

0

这将是查询。

SELECT 
    (SELECT COUNT(DISTINCT ui.total_points) 
    FROM photo_list ui 
     WHERE ui.total_points>= uo.total_points 
     ) AS rank,uo.photo_id,uo.total_points,uo.date1 
    FROM photo_list uo 
    ORDER BY rank ASC, date1 ASC 
+1

我试着用你的样本数据。按预期获得结果。 –

+0

我刚试过,它仍然返回相同的等级号码 –