Visualizzazione risultati 1 fino 12 di 12

Discussione: [PHP/MySQL] Ricavare ultima data da una paginazione

  1. #1
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito [PHP/MySQL] Ricavare ultima data da una paginazione

    Salve a tutti,

    mi ritrovo davanti a questo problema: ho ~ 900 record in una tabella MySQL di cui solo ~ 600 attivi (nel senso che solo parte dei record totali verranno mostrati agli utenti).

    Essendo tanti i record da mostrare li divido in pagine con uno script trovato in rete (fin qui nessun problema), ora necessito di stampare in una seconda pagina da un lato i numeri delle pagine (quindi 1,2,3...) e dall'altro la data in cui è stato inserito l'ultimo contatto per quella pagina.

    La tabella è impostata in questo modo:

    Codice:
    ABC | DATA
    
    DEF | 01 Gennaio 1970
    Attualmente utilizzo questo codice:
    Codice PHP:
    <?php
    $conta
    = mysql_num_rows(mysql_query("SELECT * FROM tabella WHERE attivo = '1'"));

    $pagine = ceil($conta/30);

    $data = mysql_fetch_array($mysql_query("SELECT data FROM tabella WHERE attivo = '1' LIMIT 1"));

    for(
    $i=0;$i<=$pagine;$i++){
    echo
    "PAGINA N° ".$i." | ULTIMA DATA: ".$data[0];
    }
    ?>
    Sapreste aiutarmi?
    Apprezzi l'aiuto? Offrimi un caffè!

  2. #2
    Guest

    Predefinito

    Potresti fare che cliccando sul numero corrispondente alla pagina, visiti lo stesso documento ma passando ad ogni link un valore numerico che corrisponda alla pagina da visitare. Esempio:

    miky92.altervista.org/script.php?ind=0 per la pagina 1 (il vettore inizia da 0)
    miky92.altervista.org/script.php?ind=1 per la pagina 2 e così via...

    I link possono anche essere generati in modo automatico, basta vedere quanto è grande il vettore data: mi pare ci sia una funzione apposita. Per far in modo invece che il ciclo ti parta dalla posizione desiderata, puoi fare in questo modo:

    Codice PHP:
    // Se non è passato il valore ind tramite GET, allora visualizza dalla prima pagina (i = 0)
    if (!isset($_GET["ind"]))
    $i = 0;
    // altrimenti, se il valore è passato, imposta il ciclo dalla pagina desiderata
    else
    $i = $_GET["ind"];

    for (
    $i; $i <= $pagine; $i++)
    echo(
    "PAGINA N° ".$i." | ULTIMA DATA: ".$data[0]);
    Ho visto che utilizzi le parentesi {} anche quando ad una funzione segue solo un'operazione. Non so se ne sei a conoscenza, ma puoi anche non usarle in questo caso (è molto più comodo per quello che concerne la leggibilità, basta che indenti e sei a posto ;)) Non so se ho prodotto una cosa che può esserti utile o se è una fregnaccia, magari può esserti utile comunque come spunto

    EDIT: infatti mi sono perso una parte del problema La prima soluzione che mi viene in mente è applicare un algoritmo di bubblesort al vettore data, prendi la prima posizione e sai qual'è la data più recente.
    Ultima modifica di mksoftware : 01-11-2009 alle ore 16.20.07

  3. #3
    Guest

    Predefinito

    Utilizzare MAX()?

  4. #4
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da mksoftware Visualizza messaggio
    Potresti fare che cliccando sul numero corrispondente alla pagina, visiti lo stesso documento ma passando ad ogni link un valore numerico che corrisponda alla pagina da visitare. Esempio:

    miky92.altervista.org/script.php?ind=0 per la pagina 1 (il vettore inizia da 0)
    miky92.altervista.org/script.php?ind=1 per la pagina 2 e così via...

    I link possono anche essere generati in modo automatico, basta vedere quanto è grande il vettore data: mi pare ci sia una funzione apposita. Per far in modo invece che il ciclo ti parta dalla posizione desiderata, puoi fare in questo modo:

    Codice PHP:
    // Se non è passato il valore ind tramite GET, allora visualizza dalla prima pagina (i = 0)
    if (!isset($_GET["ind"]))
    $i = 0;
    // altrimenti, se il valore è passato, imposta il ciclo dalla pagina desiderata
    else
    $i = $_GET["ind"];

    for (
    $i; $i <= $pagine; $i++)
    echo(
    "PAGINA N° ".$i." | ULTIMA DATA: ".$data[0]);
    Ho visto che utilizzi le parentesi {} anche quando ad una funzione segue solo un'operazione. Non so se ne sei a conoscenza, ma puoi anche non usarle in questo caso (è molto più comodo per quello che concerne la leggibilità, basta che indenti e sei a posto ;)) Non so se ho prodotto una cosa che può esserti utile o se è una fregnaccia, magari può esserti utile comunque come spunto

    EDIT: infatti mi sono perso una parte del problema La prima soluzione che mi viene in mente è applicare un algoritmo di bubblesort al vettore data, prendi la prima posizione e sai qual'è la data più recente.
    Mi spiace, ma la tua soluzione non è accettabile perché al caricamento della pagina deve essere tutto pronto. Per via di un rewrite non c'è possibilità di accoding query string.
    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Utilizzare MAX()?
    In che modo?
    Apprezzi l'aiuto? Offrimi un caffè!

  5. #5
    Guest

    Predefinito

    Se ordinassi i 600 risultati circa per data, dato che esgui una LIMIT per i risultati, utilizzando MAX(data) AS alias_data potresti ricavarti la data maggiore o la minore per avere quello che cerchi, no?

  6. #6
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Ma per ogni pagina devo avere un risultato, quindi ad esempio 900/30 = 30 quindi dovrei avere 30 date diverse.
    Apprezzi l'aiuto? Offrimi un caffè!

  7. #7
    Guest

    Predefinito

    Il titolo dice: Ricavare ultima data da una paginazione, quindi presumo UNA data e MAX o MIN farebbero al caso tuo se ordinassi i 20 risultati. Eseguendo una LIMIT tutto quello che viene eseguito nella query è solo per i risultati estratta dalla LIMIT, non tutti i record della tabella, capito?

  8. #8
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Si ho capito, ho errato il titolo ma al momento non mi veniva nulla di più soddisfacente.

    Secondo me comunque dovrei utilizzare più di una query, sto facendo vari tentativi in locale per vedere come risolvere.
    Apprezzi l'aiuto? Offrimi un caffè!

  9. #9
    Guest

    Predefinito

    Se hai sbagliato titolo, allora dovresti spiegare meglio cosa vuoi in modo da aiutarti in modo migliore no?

  10. #10
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Si, infatti ho cercato di spiegare il mio problema in modo più chiaro possibile.
    Apprezzi l'aiuto? Offrimi un caffè!

  11. #11
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Emh io ho visto qualcosa di troppo nel codice:
    Codice PHP:
    <?php
    $conta
    = mysql_num_rows(mysql_query("SELECT * FROM tabella WHERE attivo = '1'"));

    $pagine = ceil($conta/30);

    $data = mysql_fetch_array([QUI]$[/QUI]mysql_query("SELECT data FROM tabella WHERE attivo = '1' LIMIT 1"));

    for(
    $i=0;$i<=$pagine;$i++){
    echo
    "PAGINA N° ".$i." | ULTIMA DATA: ".$data[0];
    }
    ?>

  12. #12
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Giusta osservazione mycarlo, non so come è stata inserita quella variabile.
    Apprezzi l'aiuto? Offrimi un caffè!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •