2015-07-19 56 views
0

我试图让指定的记录的级别,我有一些成功与此代码:获得创纪录的等级用两个where子句

SELECT `rank` 
FROM 
    (
    select @rownum:[email protected]+1 `rank`, p.* 
    from TableName p, (SELECT @rownum:=0) r 
    order by point DESC 
    ) s 
    WHERE names = 'house' 

See the schema here.

此SQL查询工作,但如果我想根据city_idname得到结果,我必须使用两个where子句,然后代码不起作用。

我想获得排名house只为它的城市。我怎样才能做到这一点?

+0

你是什么意思? “where”子句?请编辑您的问题并提供样本数据和期望的结果。 –

回答

0

我想要得到的“家”排名不仅是因为它的城市

您可以通过引入另一个变量来跟踪城市的做到这一点:

SELECT `rank` 
FROM (select p.*, 
      (@rn := if(@c = city, @rn + 1, 
         if(@c := city, 1, 1) 
         ) 
      ) as rank 
     from TableName p CROSS JOIN 
      (SELECT @rn := 0, @c := -1) params 
     order by city_id, point DESC 
    ) s 
WHERE names = 'house' ; 

你也可以如果你知道“房子”只在数据中出现一次,请使用原始查询:

SELECT `rank` 
FROM (select p.*, (@rn := @rn + 1) as rank 
     from TableName p CROSS JOIN 
      (SELECT @rn := 0) params 
     where city_id = (select city_id from TableName t2 where t2.names = 'house') 
     order by point DESC 
    ) s 
WHERE names = 'house' ;