Frage

i have this code to get the position of each record:

Message.all.each_with_index do |msg, i|
    message_order[msg.id] = i
end

But now i have 100k+ messages and it takes to long to iterate over all the records. Can anyone tell me how to do this more performant? (I'm using oracle)

I thought about rownum but didn't come to a solution. A solution which returns the position for just one message would be great.

War es hilfreich?

Lösung

I don't know if I have understood your problem.

If you need the message with a specified order id (for example: 5), you can execute something like:

SELECT message
FROM (SELECT message, ROWNUM AS ID
      FROM (SELECT message
            FROM tab1
            ORDER BY some_date))
WHERE ID = 5;

Or, using analytical functions:

SELECT message
FROM (SELECT message,
             ROW_NUMBER() OVER(ORDER BY some_date) AS ID
      FROM tab1)
WHERE ID = 5;

Andere Tipps

This should work:

Message.where("id < :id", id: msg.id).count
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top