Newsgroup: it.comp.www.php
Titolo: Paginazione motore ricerca

Buongiorno,
so che si tratta di un argomento trito e ritrito, ma ancora non sono
riuscita a trovare una soluzione al mio problema...
Devo implementare un motore di ricerca su un database MySql sul quale non vi
sono permessi di scrittura: il problema e' la paginazione...
Da quanto ho capito, il metodo "classico" consiste nell'effettuare una prima
query per ottenere il numero dei risultati (necessario per calcolare quante
pagine dovranno essere visualizzate); in seguito, si effettuano le query per
visualizzare le pagine.
Ora, esiste un metodo (in "puro" PHP, no javascript o simili...) per
paginare i risultati con UNA SOLA query? Ricordo che non e' possibile
scrivere sul database...
Ogni indicazione mi sara' utile: grazie!
Laura

Laura wrote:

una sola query la vedo difficile..
se non fai un count(*) non potrai visualizzare il un index di pagine..
e farlo nella query che seleziona i dati da visualizzare non e' elegante..
-- 
www.iuz-lab.info

 e farlo nella query che seleziona i dati da visualizzare non e' elegante..
Uhm... non e' elegante, ma funzionerebbe? Puoi dirmi come? Se funziona, al
diavolo l'eleganza, purche' non ponga problemi di accessibilita' (anche per
questo chiedevo di evitare javascript)...
Grazie!
Laura

 
con una query sola c'è la classe pear Pager
-- 
Imagine if every Thursday your shoes exploded if you tied them the usual
way.
This happens to us all the time with computers, and nobody thinks of
complaining.

 con una query sola c'è la classe pear Pager
Sono una newbie in PHP, e tu mi tiri fuori 'sto Pear? :-)
Da una primissima occhiata sembrerebbe comunque interessante, magari cerco
di approfondire... Ma dammi per favore una prima informazione: Pear e' un
pacchetto che va installato sul server sul quale risiedera' il sito che devo
sviluppare, o ho capito male?
Grazie!
Laura

 Laura


 hai problemi chiedi pure.
[..]
non conosco bene il citato pacchetto.. ma IMHO non credo sia la soluzione..
se non fa piu' di una query, allora a cosa serve questa funzione (metodo?)?
<?php
function rewriteCountQuery($sql)
{
    if (preg_match('/^\s*SELECT\s+DISTINCT/is', $sql) ||
preg_match('/\s+GROUP\s+BY\s+/is', $sql)) {
        return false;
    }
    $queryCount = preg_replace('/(.|\n)*?\s+FROM\s+/is', 'SELECT COUNT(*)
FROM ', $sql, 1);
    list($queryCount, ) = preg_split('/\s+ORDER\s+BY\s+/is', $queryCount);
    list($queryCount, ) = preg_split('/\s+LIMIT\s+/is', $queryCount);
    return trim($queryCount);
}
?>
con una sola query..
o si conosce a priori il numero di record..
o si aggiunge un 'COUNT(*) AS total' ed il 'LIMIT m,n' e ci si comporta di
conseguenza (non elegante)
o si seleziona tutto e con mysql_num_rows, mysql_data_seek poi si salta alle
righe interessate (ancora non elegante)
altre soluzioni per adesso non mi vengono in mente..
e gradirei altri pareri..
-- 
www.iuz-lab.info

 
-- 


 e gradirei altri pareri..
Anchio, anch'io! :-)
Laura

 scrivere sul database...
Posso chiedere il perche' di UNA SOLA query?
ciao
Mauro

 Laura
-- 
www.iuz-lab.info

On Tue, 14 Jun 2005 08:31:00 GMT, "Laura" <la...@nospam.invalid>
wrote:

La butto lě! Potresti fare la query e salvare i dati come variabili di
sessione... ma non so se č fattibile.
Ciao
-- 
Per rispondermi togli il cappello

 singola..
Nonche' la piu semplice, direi...
Se e' cosi', allora mi facevo problemi per niente, grazie per l'attenzione!
Laura

 Posso chiedere il perche' di UNA SOLA query?
Supponevo che fosse vera l'equazione "piu' query = meno velocita'", ma da
quanto mi state dicendo forse sbagliavo...
Anche se mi pare assurdo che non sia cosi': dovro' fare una ricerca
full-text su 4-5 campi, per 4-5 mila righe... Mi sembrerebbe logico che
facendo la ricerca una volta per la query count e poi ogni volta che devo
visualizzare le pagine sia piu' dispendioso in termini di velocita' rispetto
a fare una sola query...
Forse devo ancora capire bene come funziona il tutto... :-/
Laura



Si esiste, mi pare però funzioni solo da una determinata versione di  
mysql/php in su.
Cerca bene sulla documentazione ufficiale Php, nei comandi relativi a  
mysql.
Tac
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/



Mi sbagliavo, c'è solo il comando mysql.
Copio incollo un commento dal sito php.
<quote>
Re dzver at abv dot bg's note...
I just ran some tests using MySQL Super Smack. Surprisingly, a SELECT *  
followed by a SELECT COUNT(*) actually was close in speed to a SELECT  
SQL_CALC_FOUND_ROWS * followed by a SELECT FOUND_ROWS(), but the  
SQL_CALC_FOUND_ROWS solution was still a bit faster.
Perhaps it varies by table structure? Either way, it might be worth  
checking which is faster for your application.
</quote>
Cerca reference sulla documentazione mysql.
