Avatar billede henrikal Nybegynder
18. september 2010 - 00:27 Der er 9 kommentarer

Beregninger i sql database opslag

Jeg har en MYSQL tabel med en masse data i min. 200.000 rækker.

Tabellen består bla. af:

ID, point, dato
123, 45, 11-09-2010
124, 34, 11-09-2010
123, 48, 12-09-2010
124, 35, 12-09-2010
123, 48, 13-09-2010
124, 35, 13-09-2010
125, 10, 13-09-2010
123, 49, 14-09-2010
124, 35, 14-09-2010
125, 10, 14-09-2010
123, 49, 15-09-2010
124, 37, 15-09-2010
125, 10, 15-09-2010

Jeg skal lave en query der viser en oversigt over ID hvor point de sidste 3 dage (udfra 15-09-2010) har ændret sig -3/+3 således:

Output

ID, dags dato point, +/-(3d)
123, 49, 1
124, 37, 2

Jeg har leget med nogle løsninger med fetch_array, men kan ikke helt gennemskue, hvordan det skal løses.

// Retrieve all the data from the "game_12" table
$result = mysql_query("SELECT * FROM game_12 ORDER BY id DESC")
or die(mysql_error()); 

// store the record of the "game_12" table into $row
$row = mysql_fetch_array( $result );

Skal man lave flere fetch_array og trække dem fra hinanden eller hvad?

Håber nogle kan hælpe.

På forhånd tak !

Hilsen
Henrik Albrechtsen
Avatar billede showsource Seniormester
18. september 2010 - 00:48 #1
Først og fremmest, ås bør du ændre din tabel til at datoformatet er i standard formatet,
YYYY-MM-DD f.eks. 2010-09-15

Hvordan kan du se at point er ændret ?
Avatar billede TrylleWeb Nybegynder
18. september 2010 - 10:14 #2
Hvor mange ID's er der i din tabel ?

- TrylleWeb - http://trylleriogkorttricksforalle.blogspot.com/
Avatar billede henrikal Nybegynder
18. september 2010 - 11:00 #3
Til: showsource

Det jeg søger er en funktion der kan udregne og vise alle ID der har ændret sig +/- X i de sidste Y dage.

Det må være noget med list ID fra seneste dato og udregn ændring ved at trække point fra ædste række dog max Y dage gammel.

Til TrulleWeb:

Der er omkring 5.500 ID´er, dvs. der kommer 5.500 nye rækker hver dag. Jeg vil tro at der kommer max 2.000.000 rækker i tabellen.
Avatar billede showsource Seniormester
18. september 2010 - 11:27 #4
Ja, så kan du starte med at ændre datofeltet til standard formatet.
Ellers vil det blive en længere "uredelighed"

Bruger du et standard format, har du div. tidfunktioner til din rådighed:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
Avatar billede henrikal Nybegynder
18. september 2010 - 12:00 #5
Datoen er vendt nu.

Hvordan laves resten, beregninegn skal også kun laves en gang pr. ID.
Avatar billede henrikal Nybegynder
18. september 2010 - 12:28 #6
Datoen er vendt nu.

Hvordan laves resten, beregninegn skal også kun laves en gang pr. ID.
Avatar billede showsource Seniormester
18. september 2010 - 18:58 #7
En gang pr. id ?
Du mener vel en gang pr. dato ?

Og umiddelbart, ved jeg ikke lige hvordan, måske arne_v kikker forbi ?

Kan nok finde ud af noget med flere queries, men ikke i en.
Avatar billede arne_v Ekspert
27. september 2010 - 03:33 #8
Du skal nok ud i noget:

SELECT t1.id, t1.point, t1.point-t2.point
FROM tabelnavn t1,tabelnavn t2
WHERE t1.id=t2.id AND t1.dato=X AND t2.dato=Y
AND t1.point-t2.point <> 0
Avatar billede arne_v Ekspert
20. november 2010 - 01:21 #9
kommet videre?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester