Verkligen ingen som kan svara på det här??
Listigt sätt att visa/hantera data...?
24 svar · 1 363 visningar · startad av learn · sida 2 av 2
Ett knep som ni verkar ha missat är SQL_CALC_FOUND_ROWS.
Då slipper du en extra query.
Skriv helt enkelt SELECT SQL_CALC_FOUND_ROWS a, b, c din query som vanligt
Sen kör du SELECT FOUND_ROWS() as rows direkt efteråt. Då får du ut en siffra på hur många rader din query skulle innehållit om du inte använt limit.
Det är "rätt" sätt att få ut en siffra för paginering.
Vad gäller mellanlagring beror det lite på vad du har för hostinglösning. Har du egen server kan jag rekommendera memcached. Annars kan du förmodligen spara din data i en serialiserad array i en textfil. Detta om du vill ha en cachning som funkar globalt. Vill du bara cacha data för varje användare kan du använda session.
Jag skulle gjort cacheposter och gett dom namn efter en md5 av din sqlsats och sen lagrat dom på något sätt, memcached eller fil. På så sätt kan du lätt cacha varje query för sig, och komma åt dom snabbt.
effata skrev:
Ett knep som ni verkar ha missat är SQL_CALC_FOUND_ROWS.
Då slipper du en extra query.Skriv helt enkelt SELECT SQL_CALC_FOUND_ROWS a, b, c din query som vanligt
Sen kör du SELECT FOUND_ROWS() as rows direkt efteråt. Då får du ut en siffra på hur många rader din query skulle innehållit om du inte använt limit.
Det är "rätt" sätt att få ut en siffra för paginering.Vad gäller mellanlagring beror det lite på vad du har för hostinglösning. Har du egen server kan jag rekommendera memcached. Annars kan du förmodligen spara din data i en serialiserad array i en textfil. Detta om du vill ha en cachning som funkar globalt. Vill du bara cacha data för varje användare kan du använda session.
Jag skulle gjort cacheposter och gett dom namn efter en md5 av din sqlsats och sen lagrat dom på något sätt, memcached eller fil. På så sätt kan du lätt cacha varje query för sig, och komma åt dom snabbt.
Mycket intressant, tack effata!
Jag förstår dock inte helt och hållet hur jag ska göra. Kan du ge ett enkelt exempel på hur jag kan använda metoden i PHP...? Blir inte klokare av att läsa referensmanualen.
Tack på förhand!
Först kör du din query precis som vanligt, men med SQL_CALC_FOUND_ROWS först.
$result = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 30");
Sen hämtar du bara FOUND_ROWS() direkt efter, så får du ut hur många rader queryin skulle gett utan limit.
$rowresult = mysql_query("SELECT FOUND_ROWS() as rows");
Eller var det cachningen du undrade över?
Jag skulle skött cachningen så här (pseudokod):
$sql = Din sql query
$hash = md5($sql);
if (cache item för $hash finns) {
returnera från cache;
}
kör $sql query
Cachen kan t.ex. vara en fil som heter $hash.cache, eller en memcachepost $hash, eller en rad i en array[$hash].
Tack för tipset, grym funktion!! God jul påre' :bire :bire