Citat:
Ursprungligen postat av zoran
Citat:
Ursprungligen postat av Robert
Har en sida där jag tänkte begränsa antalet sökträffar om de blir för många, och därför be användaren att begränsa sin sökning (ja ni fattar...).
Grejjen är väl den att man gör detta främst av performance skäl, eller hur? Så då undrar jag; för att få reda på att det har returnerats för många träffar så måste ju ändå sql frågan ställas, så vad vinner man egentligen på det hela? Man tvingar faktiskt användaren att ställa *ytterligare* en sql fråga, dock lite mer optimerad, men ändå?
Det är ju inte heller så bra att först göra en count för då får du ju i snitt ännu sämre prestanda (först en count sats, sedan den "riktiga" slq frågan).
Är jag ute och cyklar? :blink:
|
Varför vill du "tvinga användaren" att skriva bättre söksträng? Det är inte direkt användarvänligt.
I självaste verket kan du "begränsa" din query för varje sida:
exempel:
Du har 1 000 sidor med innehållet test i kolumnen "data".
Så du gör mer eller mindre:
$max_hits_page = 100; //Antal träffar per sida
$page = $_GET['page']; //Nuvarande sida, sidan fås genom GET-request
$start = (( $page -1 ) * $max_hits_page); //Vilken rad vill jag starta med ? Ifall det är sida 2 och vi har 100/page så blir resultatet 100 (det är ju där vi vill starta)
select * from data_table where data like '%test%' limit $start,$max_hits_page;
Då får du en query som inte returnerar mer än 100 rader.
Hur du sen räknar fram hur många sidor du har fått och hur du ritar upp [1][2] .. osv länkar lämnas åt dig som en övning
/Zoran
|
zoran: Tvinga? Om användaren tex endast öker på bokstaven "a" så får den ju tusentals träffar. Jag ber då användaren att förfina sökningen. Det är väl normalt, knappast oanvändarvänligt, snarare tvärtom.
Sen är det givetvis inga problem med [1][2]... etc, jag gör detta manuellt öven fast jag skulle kunna få den funktionaliteten gratis i .Net
Kullervo: Javisst, det är inga problem att se hur många recordsets jag har fått, men då är ju "skadan" redan skedd: sql satsen har körts och alla rs har skickats till webservern (IIS6 i mitt fall). Då kan jag ju lika gärna visa alla resultat när jag ändå har dom tillgängliga.
Såsom jag ser det:
En count sats tar längre tid än en select, men det blir bara ett minimalt recordset att skicka tillbaka. Dock måste jag köra en count före varje sökning, dvs 2 sql satser (den andra bara om counten är under ett givet tal, ex 100st)
Frågan är vad man tjänar på?