Мне нравится делать это, оценивая записи по некоторым столбцам. В этом случае значения ранга rev
группируются по id
. Те, у кого выше rev
, будут иметь более низкий рейтинг. Таким образом, наивысший rev
будет иметь ранжирование 1.
select id, rev, content
from
(select
@rowNum := if(@prevValue = id, @rowNum+1, 1) as row_num,
id, rev, content,
@prevValue := id
from
(select id, rev, content from YOURTABLE order by id asc, rev desc) TEMP,
(select @rowNum := 1 from DUAL) X,
(select @prevValue := -1 from DUAL) Y) TEMP
where row_num = 1;
Не уверен, что введение переменных делает все это медленнее. Но, по крайней мере, я не дважды запрашиваю YOURTABLE
.
Используя Ruby 1.8.6+, вы можете сделать это:
require 'enumerator' #Only for 1.8.6, newer versions should not need this.
s = "AustinTexasDallasTexas"
positions = s.enum_for(:scan, /Texas/).map { Regexp.last_match.begin(0) }
Это создаст массив с:
=> [6, 17]
"AustinTexasDallasTexas".gsub(/Texas/).map { Regexp.last_match.begin(0) }
#=> [6, 17]
Вид, см. String#index
"AustinTexasDallasTexas".index /Texas/
=> 6
Теперь вы можете расширить API-интерфейс String.
class String
def indices e
start, result = -1, []
result << start while start = (self.index e, start + 1)
result
end
end
p "AustinTexasDallasTexas".indices /Texas/
=> [6, 17]