+ Rispondi alla Discussione
Risultati da 1 a 5 di 5

Paginazione con dati casuali

Ultimo Messaggio di amadeusorrento il:
  1. #1
    User
    Data Registrazione
    Dec 2006
    Messaggi
    151

    Paginazione con dati casuali

    Buongiorno a tutti voi del forum. Sul mio sito PHP e MYSQL ho delle pagine che estraggono dati da un database e che vengono impaginate regolarmente in righe da 10. Vorrei cambiare l'order by dei dati e sostituirlo con un estrazione casuale. Il problema è che quando cambio pagina perdo informazioni sui record letti nella pagina precedente. Qualcuno ha qualche tutorial di esempio per poter superare questo problema? Grazie in anticipo
    Vivere in penisola Sorrentina www.sorrentoedintorni.it

  2. #2
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Località
    Caserta
    Messaggi
    216
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    La selezione casuale dei dati la puoi fare direttamente da MySQL, con la clausola ORDER BY RAND()

    Codice:
    SELECT * FROM nome_tabella ORDER BY RAND()
    che va messa dopo le clausole WHERE e prima della clausola LIMIT.
    Se hai la paginazione e vuoi escludere i dati precedentemente visualizzati, puoi escludere i dati da scartare con la clausola NOT IN([array]).

    Codice:
    SELECT * FROM nome_tabella WHERE id NOT INT('1', '15', '76', '99')
    Siccome immagino tu estragga i dati con una mysql_fetch_*(), puoi assegnare ad un array php tutti gli id che hai estratto, per poi passarlo al MySQL nella query successiva.

    Codice PHP:
    $_SESSION["visualizzati"] = array();
    $sql "SELECT * FROM ...";
    $query mysql_query($sql);
    while (
    $riga mysql_fetch_object($query)) {
        
    // le tue operazioni
        
    $_SESSION["visualizzati"][] = $riga->id;

    è un abbozzo, sbattuto così com'è nel tuo sistema di paginazione non va bene, ma ora dovresti avere un'idea concreta sul come procedere.
    Endelab - Web Development

  3. #3
    User
    Data Registrazione
    Dec 2006
    Messaggi
    151
    Ciao Francesco...grazie innanzitutto...effettivamente ho provato come mi hai detto tu e la cosa funzionerebbe pure
    Il problema si presenta se navigo un pochino tra le pagine...si arriverà ad un punto che la select non mi caccia nessun dato perché mettendo l'id già selezionato nell' array se ripasso sulla pagina non lo estrae più

    Es..passo sulla pagina 1 e metto nell'array id (1, 3)
    vado nella pagina 2 e metto nell'array id 2 e 4 avendo così (1,2,3,4)

    Se ripasso sulla pagina 1 non mi estrarrà più nessun dato in quando la select è fatta in questo modo:

    SELECT * FROM table where categoria = $cat and id NOT IN $Esclusi order by RAND()

    dove $Esclusi = (1,2,3,4)



    Non so se mi riesci a capire il mio problema
    Grazie ancora


    Citazione Originariamente Scritto da Francesco Di Caprio Visualizza Messaggio
    La selezione casuale dei dati la puoi fare direttamente da MySQL, con la clausola ORDER BY RAND()

    Codice:
    SELECT * FROM nome_tabella ORDER BY RAND()

    che va messa dopo le clausole WHERE e prima della clausola LIMIT.
    Se hai la paginazione e vuoi escludere i dati precedentemente visualizzati, puoi escludere i dati da scartare con la clausola NOT IN([array]).

    Codice:
    SELECT * FROM nome_tabella WHERE id NOT INT('1', '15', '76', '99')
    Siccome immagino tu estragga i dati con una mysql_fetch_*(), puoi assegnare ad un array php tutti gli id che hai estratto, per poi passarlo al MySQL nella query successiva.

    Codice PHP:
    $_SESSION["visualizzati"] = array();
    $sql "SELECT * FROM ...";
    $query mysql_query($sql);
    while (
    $riga mysql_fetch_object($query)) {
        
    // le tue operazioni
        
    $_SESSION["visualizzati"][] = $riga->id;

    è un abbozzo, sbattuto così com'è nel tuo sistema di paginazione non va bene, ma ora dovresti avere un'idea concreta sul come procedere.
    Vivere in penisola Sorrentina www.sorrentoedintorni.it

  4. #4
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Località
    Caserta
    Messaggi
    216
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    E' il motivo per il quale ti avevo detto che preso così com'era non sarebbe andato bene. Devi decidere tu come farlo funzionare... se navighi tra le pagine prima o poi arriverai ad un punto in cui l'array te li esclude tutti. Ora sta te decidere come procedere quando l'utente ha visualizzato tutti i dati disponibili.
    Se vuoi mantenere la casualità devi fare in modo da imporre un controllo quando il numero totale dei record in tabella, meno il numero di id presenti nell'array degli esclusi, è minore del numero di righe che vuoi presentare nella pagina. In quell'occasione devi decidere cosa fare. Azzerrare l'array? Rimuovere solo alcuni record casuali?
    Endelab - Web Development

  5. #5
    User
    Data Registrazione
    Dec 2006
    Messaggi
    151
    Grazie Francesco...
    Ho poi risolto in un altro modo, penso più semplice

    Ho costruito una variabile di sessione. Se accedo la prima volta nella prima pagina, gli assegno un numero casuale
    $_SESSION["casuale"] = rnd();

    Poi mi costruisco la SELECT * FROM table where categoria = $cat order by RAND($_SESSION["casuale"])

    Grazie cmq
    Vivere in penisola Sorrentina www.sorrentoedintorni.it

+ Rispondi alla Discussione

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.