Mi sapreste dare una fonte autorevole dove trovare un esempio di
implementazione efficiente di questo algoritmo o dare indicazioni per
realizzarlo in maniera efficiente?
Pensavo ovviamente di usare LIMIT nell'interrogazione mysql però non
saprei come fare la cosa in maniera efficiente. Ad esempio: faccio PRIMA
l'interrogazione senza usare LIMIT, trovo con mysql_num_rows() il numero
di risultati e quindi faccio una nuova interrogazione con LIMIT in cui
cerco solo i risultati che voglio visualizzare nella prima pagina o non
c'è bisogno di fare due interrogazioni? Perchè se la faccio subito con
LIMIT ho visto che non so il numero totale di risultati e di conseguenza
non posso calcolare quante pagine devo linkare (l'indice di cui parlavo
prima) nella pagina con i risultati.
Immagino che ci sia da fare il minor numero di query possibile,
specialmente nell'ottica di un sito con tanti utenti connessi
contemporaneamente...
ciao e grazie anticipatamente per le risposte!
Praticamente hai giů descritto il funzionamento da solo, tranne un paio di
cose: fai prima a fare due diverse query, la prima per il conteggio dei
risultati, tramite COUNT (e non con mysql_num_rows), la seconda per
l'estrapolazione dei dati tramite limit. Se il database č ben strutturato
e le query ottimizzate, il tempo necessario per la loro esecuzione č quasi
trascurabile.
Francesco
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it
allora:
imposti il numero di record da visualizzare per pagina (prendiamo per
esemio 10)
$num =10;
quindi nelle query si avranno i limit:
-pagina 1: LIMIT 0-9
-pagina2: LIMIT 10-19
-pagina3: LIMIT 20-29
e cosi via
poi prendi in GET il numero di pagina o imposti il valore a 1 in caso
di prima pgina
if (isset($_GET['pagina'])) $pagina= $_GET['pagina']; else
$pagina=1;
ora calcoli i limit della query:
//limite basso
if ($pagina==1) $limite_down=0;
else $limite_down = ($pagina-1)*$num;
//limite alto
$limit_up = $limit_down+($mun-1)
ora che hai i limiti procedi con la query semplicissima:
$query = "SELECT * FROM tua_tabella LIMIT ".$limit_down." , ".
$limit_up;
poi visualizzi i tuoi record come piu ti aggrada
e alla fine fai ii link pagina successiva e pagina precedente:
>> <a href="stessapagina?pagina=<?php echo $pagina+1">
<< <a href="stessapagina?pagina=<?php echo $pagina-1">
è una cosa abbastanza di base quella che ti ho scritto qui sopra. stai
attento che devi aggiungere i controlli dei link in caso di prima e
ultima pagina (se sei a pagina 1 non linkare pagina 0 - aggiungi il
controllo sui record totali per avere un limite in alto )
Chiedo perchè prima ho letto da Francesco F di usare COUNT.
ciao e grazie anticipatamente per il supporto!
sinceramente nn lo so. io ti ho postato la procedura che utilizzo
solitamente, questo non vuol dire ceh sia la piu giusta.
il comando sql che dici te non lo conosco. io ti direi di provare. se
funziona hai gia fatto
(anche perche ammetto che il mio metodo è un po macchinoso eheh)
Sinceramente non la conoscevo, può essere interessante valutare, su grandi
mole di dati, le differenze di prestazioni tra due distinte query e tale
opzione, fermo restando:
1 - SQL_CALC_FOUND_ROWS and FOUND_ROWS() are available starting at MySQL
4.0.0.
2 - E' strettamente collegata con il DMBS
Se hai voglia di far due prove, posta il risultato!
ciao e grazie.
ciao e grazie.
ah semplicemente faccio la query senza limit all'inizio
e poi con il comando mysql_num_rows($query) ho il totale dei record.