Visualizzazione dei risultati da 1 a 5 su 5

Hybrid View

  1. #1

    MySQL, trovare la posizione di un record

    *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
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  2. #2
    Trovato un altro tassello, non è la JOIN che da fastidio, ma è il GROUP BY
    o meglio, se messi insieme da quel problema, se lasciati singolarmente non danno problemi
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  3. #3
    No, mi son sbagliato, avevo sbagliato la join.
    Niente, sono al punto di prima, nessuno idea ?
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  4. #4
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    prova così:

    codice:
    SET @pos=0;
    SELECT * FROM
    (
        SELECT id, time, @pos:=@pos+1 as pos 
        FROM table AS pt
        JOIN table2 t2 ( ... )
        WHERE 1
        ORDER by time DESC
    ) sub;
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  5. #5
    Nulla, uguale
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.