/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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>


Søg
Reklame
Statistik
Spørgsmål : 177505
Tips : 31968
Nyheder : 719565
Indlæg : 6408554
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste