*Piccolo ot* Stamattina entrando qui mi si è sconvolta la giornata vedendo questo form aggiornato, non ci potevo credere *Fine ot*

Ho un sistema di paginazione in php e dovrei far in modo di trovare su che pagina si trovi un record con id x; considerando anche che sia l'ordinamento che la quantità di records per pagina visionabili è variabile. Non vorrei usare il metodo più esoso: parsare le pagine una ad una per trovare poi il riscontro. Vorrei usare un'unica query.
Quindi, l'idea, era quella di trovare a che posizione, sul database, il record X fosse posizionato. Poi con php fare un semplice "posizione/recordperpagina" e trovare così la pagina.
Perdendo un pò di tempo sono arrivato al punto di usare le user variables e sembra anche funzionare, finché alla query però non subentra una join!

Con una query del genere il ranking segue segue senza problemi l'ORDER:
codice:
SET @pos=0;
SELECT * FROM
(
    SELECT id, time, @pos:=@pos+1 as pos 
    FROM table AS pt 
    ORDER by time DESC
) sub;
Mentre se aggiungo una join l'order viene praticamente ignorato e viene usato quello di default
codice:
SET @pos=0;
SELECT * FROM
(
    SELECT id, time, @pos:=@pos+1 as pos 
    FROM table AS pt
    JOIN table2 t2 ( ... )
    ORDER by time DESC
) sub;
Che non è un gran problema nel momento di una left/right join, basta eliminarla e sarebbe uguale, ma nel momento di una inner join non si può ommettere.

Qui si può vedere qualcosa di piu "specifico": http://s11.postimg.org/bdk2cksr7/rankjoin.png

Qualche idea sul perché ? Accetti anche metodi alternativi