• User

    problema paginazione e select con sql

    Ciao a tutti!

    Ho un problema ovvero nell'ultima pagina della paginazione mi ripete i records 2 e 3 invece di visualizzarmi solo l'1

    La query in sql è questa:

    $query_limit = mssql_query("SELECT * from (SELECT TOP $per_page * FROM (SELECT TOP ($primo + $per_page) * FROM news ORDER BY id desc) AS t1 order by id asc) AS t2 ORDER BY id desc");

    Ottengo questa cosa:
    pagina 1 - 16,15,14
    pagina 2 - 13,12,11
    ...
    pagina 5 - 5,4,3
    pagina 6 - 3,2,1

    Non riesco a capire cosa devo modifica nella query o nelle variabili

    Le variabili:
    $per_page = numero records per pagina (ho messo 3)

    $current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];
    $current_page = isset($_GET['page']) && $_GET['page'] > 1 ? (int) $_GET['page'] : 1;
    $primo = ($current_page - 1) * $per_page;

    Grazie mille :ciauz:


  • User Attivo

    Ciao,
    innanzitutto modifica la query così
    [PHP]
    $query_limit = mssql_query( "SELECT * FROM news ORDER BY id DESC LIMIT $primo,$per_page" )
    [/PHP]

    Alessandro


  • User

    Ciao Magicale,
    forse non mi sono spiegata bene, io devo realizzare la query per un database in sql server 2005 e in questo caso la funzione LIMIT non esiste, da qui il problema 🙂

    Hai qualche idea di come risolvere l'inghippo?

    grazie ^__^


  • User Attivo

    Sorry, non me n'ero accorto...

    Prova queste:

    
    SELECT TOP $per_page * FROM (SELECT ROW_NUMBER() OVER (ORDER BY id DESC) AS RowNumber, * FROM news) AS t1 WHERE RowNumber >= $primo 
    
    
    
    SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY id DESC) AS RowNumber, * FROM news) AS t1 WHERE RowNumber BETWEEN $primo AND $ultimo 
    
    

    con $ultimo=$primo+$per_page-1


  • User

    Ok, grazie provo e ti faccio sapere ^__^


  • User

    Rieccomi,

    Allora nel primo caso mi da errore nella visualizazione in questo modo:
    pagina 1: 16,15,14
    pagina 2: 14,13,12
    ...
    pagina 6: 2,1

    Tutto corretto tranne quella ripetizione nella seconda pagina del record 14 O__o

    Nel secondo caso invece:
    pagina 1: 16,15,(visualizza solo due record)
    pagina 2: 14,13,12
    ...
    pagina 6: 2,1

    Scusa se sono piuttosto dura su questa cosa, ma non so dove è l'errore -___-

    Grazie


  • User Attivo

    Per il primo caso devi correggere la query mettendo RowNumber > $primo e non >=

    Per il secondo caso, correggi
    [PHP]
    $primo = ($current_page - 1) * $per_page +1
    [/PHP]

    Dovrebbero funzionare adesso 🙂


  • User

    Grazie mille !!!!!
    Mi hai risolto un grosso problema, stavo annegando in questo codice che non vedevo nemmeno più dove fare modifiche, 1 paio di occhi in più sono stati risolutivi grazie mille ancora ^__________^