Newsgroup: it.comp.www.php
Titolo: [PHP-MYSQL]-Creare un indice per dividere in pagine i risultati di una query

Ciao a tutti, vorrei realizzare in una pagina XHTML un indice di link 
tipo quello di Google che permette di scegliere, una volta fatta 
un'interrogazione, quale pagina visualizzare (es. ci sono 100 risultati, 
se li voglio 10 per pagina avrò un indice di 10 link alle 10 pagine di 
risultati e avrò visualizzata subito la prima pagina con i primi 10 
link, immagino sappiate tutti com'è la cosa non c'è bisogno di 
spiegarlo... :) ).
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!

 contemporaneamente...
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

> <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 )

 
Grazie per i suggerimenti fin qui arrivati!
Volevo chiedervi:
fare una prima query usando SQL_CALC_FOUND_ROWS scritto dopo la parola 
"SELECT" nella query e impostando da subito in questa query il LIMIT può 
andare?
Praticamente richiamerei subito dopo con la funzione SELECT FOUND_ROWS() 
il numero totale di risultati (che avrei avuto senza usare la LIMIT). Ho 
appena visto adesso questa prassi nel manuale mysql (sono un niubbo, non 
l'ho già letto tutto :) ).
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)

 l'ho già letto tutto :) ).
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!



Beh, se l'alternativa č una COUNT(*) direi che č analogamente macchinosa. :)
Tu come la fai di solito la conta del numero totale di risultati da 
visualizzare su piů pagine?
  ciao e grazie.

 
Non so fare ed esula dal mio progetto (che devo finire in fretta), sorry!
Se a qualcuno va di fare questo bench postate pure i risultati che 
possono servire a tutti! ;)
  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.