|
| opdeling af et år... Fra : strix nebulosa |
Dato : 03-12-01 08:47 |
|
Hej
Er der nogen som har nogen goe' forslag til hvilke funktioner jeg skal
ha' fat i, hvis/når jeg vil udskille flere tusinde udtræk fra en mySQL
database i 73 perioder over et år - såkaldte 5 dages perioder - via
timestamp!??
Jeg ku' selvfølgelig godt lave 73 SELECTs med dato BETWEEN det_ene og
det_andet - men er der nemmere måder i PHP!??
MVH Steen Brølling
--
strix nebulosa <strix@mail.dk>
| |
Anton Stonor (03-12-2001)
| Kommentar Fra : Anton Stonor |
Dato : 03-12-01 14:15 |
|
On Mon, 03 Dec 2001 08:46:57 +0100, strix nebulosa <strix@mail.dk>
wrote:
>Er der nogen som har nogen goe' forslag til hvilke funktioner jeg skal
>ha' fat i, hvis/n=E5r jeg vil udskille flere tusinde udtr=E6k fra en mySQL
>database i 73 perioder over et =E5r - s=E5kaldte 5 dages perioder - via
>timestamp!??
>
>Jeg ku' selvf=F8lgelig godt lave 73 SELECTs med dato BETWEEN det_ene og
>det_andet - men er der nemmere m=E5der i PHP!??
Hvis du virkelig skal bruge flere tusind rækker i dit udtræk, kan du
nøjes med 1 select, der henter dem alle. Så kan du efterfølgende
inddele og behandle dem i perioder i PHP.
Du kan også overveje, om du virkelig har behov for at hive et så stort
udtræk over i PHP, eller om du kan lave en mellemregning i MySql. Det
kunne fx være tilfældet, hvis dine slutdata er diverse felter, der er
lagt sammen.
--
Anton Stonor
http://jul.giraffen.dk
| |
strix nebulosa (03-12-2001)
| Kommentar Fra : strix nebulosa |
Dato : 03-12-01 14:40 |
|
Hej
On Mon, 03 Dec 2001 13:14:58 GMT
stonor@yahoo.com (Anton Stonor) wrote with a touch of lunacy:
> Hvis du virkelig skal bruge flere tusind rækker i dit udtræk, kan du
> nøjes med 1 select, der henter dem alle. Så kan du efterfølgende
> inddele og behandle dem i perioder i PHP.
Ja det var også det jeg tænkte - men hvilke funktioner er det jeg ska'
bruge i PHP!?? Bare et hint om hvad jeg skal lede efter...
> Du kan også overveje, om du virkelig har behov for at hive et så stort
> udtræk over i PHP, eller om du kan lave en mellemregning i MySql. Det
> kunne fx være tilfældet, hvis dine slutdata er diverse felter, der er
> lagt sammen.
Ja det det i virkeligheden drejer sig om, er at finde et maksantal
blandt flere muligheder indenfor en 5 dags periode. Og det ska' gøres
for hver 5 dags periode - 73 om året. En større beregning ved jeg godt,
så derfor vil jeg gerne ha' gjort det så servermæssigt hurtigt som
muligt; så serveren ikke kører helt i sænk :)
Steen Brølling
--
strix nebulosa <strix@mail.dk>
| |
Thomas Lindgaard (03-12-2001)
| Kommentar Fra : Thomas Lindgaard |
Dato : 03-12-01 15:02 |
|
>> Du kan også overveje, om du virkelig har behov for at hive et så stort
>> udtræk over i PHP, eller om du kan lave en mellemregning i MySql. Det
>> kunne fx være tilfældet, hvis dine slutdata er diverse felter, der er
>> lagt sammen.
>
>Ja det det i virkeligheden drejer sig om, er at finde et maksantal
>blandt flere muligheder indenfor en 5 dags periode. Og det ska' gøres
>for hver 5 dags periode - 73 om året. En større beregning ved jeg godt,
>så derfor vil jeg gerne ha' gjort det så servermæssigt hurtigt som
>muligt; så serveren ikke kører helt i sænk :)
Hvis det ikke er noget der ændrer sig over tid (undtagen for den indeværende
5-dages periode), så kunne man måske overveje simpelthen at gemme værdierne
i en seperat tabel. Når man så skal lave opslaget, er det kun et spørgsmål
om at slå nogle værdier op samt at beregne den seneste værdi.
.... og inden jeg får tæsk for ovenstående... det giver redundans og er ikke
pæn database-håndtering, men det kunne måske lette på serverens arbejde?
/Thomas
| |
strix nebulosa (03-12-2001)
| Kommentar Fra : strix nebulosa |
Dato : 03-12-01 15:15 |
|
Hej
On Mon, 3 Dec 2001 15:01:36 +0100
"Thomas Lindgaard" <thomas@dnspilot.com> wrote with a touch of lunacy:
> Hvis det ikke er noget der ændrer sig over tid (undtagen for den indeværende
> 5-dages periode), så kunne man måske overveje simpelthen at gemme værdierne
> i en seperat tabel. Når man så skal lave opslaget, er det kun et spørgsmål
> om at slå nogle værdier op samt at beregne den seneste værdi.
Jow' det må siges at ændre sig over tid. Det er tænkt som være en
database hvortil måske 300 eller 400 (hvis heldigt) forskellige inserter
data via diverse interfaces.
Der vil ikke være nogen umiddelbar grænse for hvornår data skal være
indtastet, så de enkelte perioders makstal kan snildt ændre sig flere
måneder efter den reelle periode - desværre. Ellers ku' det sådan set
være en go' ide´, da plads ikke er nogen hindring.
> ... og inden jeg får tæsk for ovenstående... det giver redundans og er ikke
> pæn database-håndtering, men det kunne måske lette på serverens arbejde?
<smiley>
Steen
--
strix nebulosa <strix@mail.dk>
| |
Thomas Lindgaard (03-12-2001)
| Kommentar Fra : Thomas Lindgaard |
Dato : 03-12-01 16:06 |
|
>Jow' det må siges at ændre sig over tid. Det er tænkt som være en
>database hvortil måske 300 eller 400 (hvis heldigt) forskellige inserter
>data via diverse interfaces.
ADR :)
/Thomas
| |
Thomas Lindgaard (03-12-2001)
| Kommentar Fra : Thomas Lindgaard |
Dato : 03-12-01 16:11 |
|
Davs
Jeg kom lige til at tænke på noget andet:
Kan du ikke tilføje et felt WHICH_FIVE_DAY_PERIOD og her smide et tal mellem
0 og 73. Så kan du i dine SQL'er skrive noget i retning af
SELECT SUM(column) FROM table GROUP BY WHICH_FIVE_DAY_PERIOD
Det med at regne ud, hvilken værdi der skal smides i den nye kolonne, kan du
regne ud i PHP'en, te'ver'te'fald...
/Thomas
| |
Christian Schmidt (03-12-2001)
| Kommentar Fra : Christian Schmidt |
Dato : 03-12-01 22:10 |
|
strix nebulosa wrote:
>
> Ja det det i virkeligheden drejer sig om, er at finde et maksantal
> blandt flere muligheder indenfor en 5 dags periode. Og det ska' gøres
> for hver 5 dags periode - 73 om året. En større beregning ved jeg godt,
> så derfor vil jeg gerne ha' gjort det så servermæssigt hurtigt som
> muligt; så serveren ikke kører helt i sænk :)
Hvad med noget i retning af flg.:
SELECT MAX(et-eller-andet), FLOOR((TO_DAYS(dato) + 2) / 5) AS groupby
FROM tabel WHERE ... GROUP BY groupby
2-tallet kan erstattes af andre tal, hvorved begyndelsen af
femdagesperioderne kan forskydes.
Hvordan det performer, ved jeg ikke, men da FLOOR((TO_DAYS(dato) + 2) /
5) er monotont voksende som funktion af feltet "dato", da vil en dygtig
optimizer kunne udføre forespørgslen effektivt, hvis du har indeks på
dato-feltet.
Christian
| |
Thomas Lindgaard (03-12-2001)
| Kommentar Fra : Thomas Lindgaard |
Dato : 03-12-01 23:13 |
|
> SELECT MAX(et-eller-andet), FLOOR((TO_DAYS(dato) + 2) / 5) AS groupby
> FROM tabel WHERE ... GROUP BY groupby
HEHE :)
Porno hvis det virker
/Thomas
| |
strix nebulosa (04-12-2001)
| Kommentar Fra : strix nebulosa |
Dato : 04-12-01 08:20 |
|
Mojn'
On Mon, 3 Dec 2001 23:12:32 +0100
"Thomas Lindgaard" <thomas@it-snedkeren.dk> wrote with a touch of lunacy:
> > SELECT MAX(et-eller-andet), FLOOR((TO_DAYS(dato) + 2) / 5) AS groupby
> > FROM tabel WHERE ... GROUP BY groupby
>
> HEHE :)
> Porno hvis det virker
Ren porno - det virker faktisk som udgangspunkt :)
Steen Brølling
--
strix nebulosa <strix@mail.dk>
| |
strix nebulosa (04-12-2001)
| Kommentar Fra : strix nebulosa |
Dato : 04-12-01 08:19 |
|
Daws'
On Mon, 03 Dec 2001 22:10:27 +0100
Christian Schmidt <christian@schmidt.net> wrote with a touch of lunacy:
> Hvad med noget i retning af flg.:
>
> SELECT MAX(et-eller-andet), FLOOR((TO_DAYS(dato) + 2) / 5) AS groupby
> FROM tabel WHERE ... GROUP BY groupby
>
> 2-tallet kan erstattes af andre tal, hvorved begyndelsen af
> femdagesperioderne kan forskydes.
Øhhm. Hvis jeg forstår ovenstående ret, så er outputtet groupby = et
dagsnummer i henhold til en eller anden regel i mySQL (date funktionen).
Altså 2001-11-28 = 731187 og 2001-11-30 = 731189, efter hvilket jeg kan
sortere datoerne!??
Sådan ser det i hvert fald ud, og det virker! Det er faktisk ret genialt
:)
> Hvordan det performer, ved jeg ikke, men da FLOOR((TO_DAYS(dato) + 2) /
> 5) er monotont voksende som funktion af feltet "dato", da vil en dygtig
> optimizer kunne udføre forespørgslen effektivt, hvis du har indeks på
> dato-feltet.
Ja det performer sån' set godtnok som udgangspunkt - men nu skal der
leges med det :)
Tusind tak!
MVH Steen Brølling
--
strix nebulosa <strix@mail.dk>
| |
|
|