Newsgroup: it.comp.www.php
Titolo: ricerche su db e num risultati

salve.
devo fare delle ricerche su una tabella di mysql.
Tale ricerca può tirare fuori un numero elevato di risultati, ma io
nella pagina ne voglio mostrare solo una parte per volta e poi metto i
tasti freccia per andare avanti.
Per aumentare le prestazioni faccio questa query:
select * from tabella where condizione limit 20,10
così mysql_fetch_rows mi tira fuori 10 righe.
però ho anche bisogno di sapere quanti risultati sono in tutto, e
chiaramente mysql_num_rows() ritorna solo 10, visto che ho imposto il
limit.
allora dovrei fare una seconda query:
select * from tabella where condizione
senza il limit e tirare fuori solamente il mysql_num_rows
oppure
select count(*) from tabella where condizione
e usare mysql_fetch_row per prendere il risultato, ma in entrambi i
casi il tempo che impiega è alto (su 3000 risultati impiega circa 15
millisecondi contro i 0.5 impiegati dalla prima query)
In qualche caso la mia query non ha la where (semplicemente ho bisogno
di tutta la tabella) quindi il numero di risultati equivale al numero
di righe della tabella... ma come si preleva?
Grazie
Matteo

 righe della tabella... ma come si preleva?
che c'entra la where con la paginazione?
la where definisce dei canoni di selezione, la paginazione ha a chge fare
con la LIMIT 


per paginazione intendo che la mia query da un tot numero di
risultati; la pagina che restituisco al browser ne mostra solo 10.
Quindi in una singola sessione io prelevo e stampo solo 10 risultati.
Il numero di risultati mi serve per mostrarlo all'utente e per sapere
quanti pulsantini "pag.1 - pag.2 - pag.3 ... pag.n" mettere.
A meno di non cacharli da qualche parte, il numero di risultati mi
serve di calcolarli ad ogni sessione.
15ms (ma anche 150) è niente sul tempo necessario perchè internet
restituisca la pagina e il browser la renderizzi, ma il tempo che ho
calcolato è relativo ad un processore dual core con 3G di ram, mentre
il server (su cui non posso testare) è un mezzo core con decisamente
meno ram.
altra cosa.
la query di cui sopra era
select a,b from tabella limit 0,10
(senza where) su una tabella di 3287 elementi e impiega c.a. 0.4 ms
la query di ricerca
select a,b from tabella where a like '%test%' limit 0,10
che produce un solo risultato, impiega 7.6 ms
il calcolo, eseguito eliminando il limit e usando mysql_num_rows,
impiega 7.3 ms
la query di ricerca
select a,b from tabella where a like '%pippo' limit 0,10
produce 123 risultati con 7.4 ms e il calcono ne impiega 7.4
Matteo

 (senza where) su una tabella di 3287 elementi e impiega c.a. 0.4 ms
non hai capito, l'assenza o meno di where non c'entra niente con la
paginazione.
La paginazione riguarda la "quantit�" di risultati che vuoi far vedere
in una volta, la where riguarda il "tipo" di risultati che vuoi far vedere
(sempre)

 righe della tabella... ma come si preleva?
select count(*) from tabella;
e poi fai un mysql_fetch_*(), come dici sopra.
Visti i tempi di cui stiamo parlando (15 ms) forse conviene fare meno 
query, piuttosto che cercare di ottimizzare tante (ok, qui solo 2) query, 
visto che il server MySQL deve comunque compilarle prima di eseguirle.
Bye.