2012-02-29 19 views
1

給定一個表的MySQL:查詢返回的行偏移只有

field1 | field2 

abc  | 1 
efg  | 30 
etc  | 10 

我想運行像SELECT offset() FROM table WHERE field1 = 'etc' ORDER BY field2 DESC

查詢這樣的假想查詢應該返回2(排序由field2 descfield1 = etc是第二排)

任何干淨的方式來做到這一點?

感謝

+0

您是否想按某個度量標準對行進行排名,然後返回某些行的排名?準確地說是 – 2012-02-29 14:58:29

+0

。對不起,但我的英語是一個不好的野獸。 – cedivad 2012-02-29 14:59:26

+0

所以'SELECT offset()FROM table WHERE field1 ='abc'ORDER BY field2 DESC' should return 0 and field1 ='efg'should return 1? – 2012-02-29 15:00:26

回答

1

如果你的意思是行偏移:行的秩與order by field2 DESC具有field1 = 'etc'排序後的結果,那麼你可以這樣做:

SET @rowRank = 0; 
SELECT Sub.rowRank 
FROM 
(
    SELECT *, (@rowRank := @rowRank + 1) as rowRank 
    FROM TableName 
    ORDER BY field2 DESC 
) AS Sub 
WHERE Sub.field1 = 'etc' 

這應返回2.

+0

就是這樣的表達式'select *,any' valid? – triclosan 2012-02-29 15:09:18

+0

@triclosan,是的,它是有效的。 – 2012-02-29 15:22:13

0
select count(*) 
from table 
where field2 > {field2 of the row to search the offset for, in this case, 10}; 
+0

爲什麼減1? – cedivad 2012-02-29 15:01:11

+1

因爲這不是真正的查詢。 – 2012-02-29 15:03:08

+0

我不這麼認爲。 ('newsgroup') - > where('freshness','>',$ newsgroup ['freshness']) - > DB :: select(DB :: expr('COUNT(newsgroup_id)AS rank')) - > > execute() - > get('rank') – cedivad 2012-02-29 15:06:34

1

怎麼這樣呢?

SELECT COUNT(*) FROM table outer 
WHERE field1 != 'etc' 
AND field2 <= (SELECT MAX(inner.field2) 
    FROM table inner 
    WHERE inner.field1 = outer.field1)