Det räcker med en sql-sats:
SELECT SUM(antal) FROM dag WHERE tillid=X ORDER BY id DESC limit 7
Funktionen sum() adderar värden, kort och gott.
8 svar · 330 visningar · startad av joakimweb
Det räcker med en sql-sats:
SELECT SUM(antal) FROM dag WHERE tillid=X ORDER BY id DESC limit 7
Funktionen sum() adderar värden, kort och gott.
Mjo, men exakt så har jag ju :-(
IntTotal = Connect.Execute("SELECT Sum(antal) FROM dag WHERE tillid='"&iID&"' ORDER BY id DESC limit 7").Fields(0)
fast att jag då skippar RecSetet. Finns det inget annat sätt att skriva med sum just när man ska ha limit med?
Det man vill göra är
SELECT Sum(antal) FROM (
select antal
from dag
WHERE tillid= <iID>
ORDER BY id DESC
limit 7) dt
-- eller
select sum(antal) from dag
where tillid = <iID>
and id in (
select id
from dag
order by id desc
limit 7)
Eftersom det ser ut som Mysql så går inte det och då får man göra det i flera steg. Skapa en temptabell som innehåller värdena från
select antal
from dag
order by id desc
limit 7
och gör sedan summeringen på värdena i temptabellen.
Okej, bra att veta =)
MySQL-databas används.
Om man har som nu att 7 senaste loopas igenom och då antal = antal + RecSet("antal"), tjänar man nåt på att skapa en temporär tabell med innehållet, räkna ut och sedan radera?
Jag har inte arbetat så mycket med såpass avancerad SQL, har du något exempel på hur en temp-tabell skall göras? (tabelltyp + transfer av 7 senaste till egen tabell)
Tack på förhand!
Om det bara gäller 7 värden så kan du lika gärna hämta värdena till applikationen och summera där så just i detta fall har man inte någon direkt nytta av en temptabell.
Man kan skapa en temptabell med
create temporary table x select ....
hmm...
så create temporary table x select * from dag order by id desc limit 7 skall fungera i så fall?
Hämtar jag bara data som vanligt från x sedan?
Raderas tabellen automatiskt?
Det fungerade!
Vid själva registreringen av besökare kollas om ett ip-nummer finns med bland drygt 500 000 andra. Om man skapar en temp-tabell för kanske de som är till just den användaren (statistikid), skulle det innebära förbättrat prestanda?
Det som fungerar nu:
Connect.Execute("CREATE TEMPORARY TABLE temp SELECT * FROM dag WHERE tillid='"&iID&"' ORDER BY id DESC limit 7")
maxantal = Connect.Execute("SELECT Sum(antal) FROM temp WHERE tillid='"&iID&"'").Fields(0)
Connect.Execute("DROP TABLE temp")
Det står att tabellen automatiskt raderas vid connect.Close, men tydligen måste den raderas så (?)