Avatar billede dj-sejler Praktikant
16. september 2010 - 00:43 Der er 6 kommentarer og
1 løsning

ugeudtræk fra database

Hej

Jeg vil meget gerne kunne trække noget data ud fra min database ud fra hvilken uge de er blevet lagt i databasen.

For hver række i min tabel har jeg gemt tiden som UNIX time stamp.

jeg vil gerne have at uge-link-variablen bliver på formen:
week=372010 eller week=37-2010

jeg har rodet lidt med det, men er ret sikker på at jeg har en masse unødvendige linjer med, og det tager heller ikke højde for år med 53 uger, derfor vil jeg slet ikke lægge det op.

men bare skitsere mine ideer her:

if (!isset($_REQUEST['week']) {
  Denne uge
}

$dbs = ud fra $_REQUEST lave en start på uger fra 00:00
$dbe = evt bare lægge 7dage - 1 sekund til

nogen der kan lave en sådan kode der også tager højde for år med 53 uger?
Avatar billede stoffer Nybegynder
16. september 2010 - 06:16 #1
et simpel db kald henter alle records for en bestemt uge med en give dato som parameter.

SELECT * FROM [dbtable] WHERE (((Format([datefield],'yyyy-ww'))=Format(Date(),'yyyy-ww')));

Date = en dato i den uge du vil have resultat fra.

Format eksisterer IKKE i f.eks. MSSQL. Der skal man bruge datepart, f.eks. sådan her:

SELECT CAST(DATEPART(year,getDate()) as char(4)) + '-' + CAST(DATEPART(week,getdate()) as char(2))


Nu kan jeg se du vil have week number i query'en. Derfor skal du have en dato som er inden for den uge do efterspørg til ovenstående query.

Det gøres nemmest således:

select DateAdd(week,
        <your week no> - 1,
        '1/1/' + CAST(DATEPART(yy,getdate()) as varchar(4)))

Ovenstående er eksemple fra MSSQL, men de fleste DB'er har en dataadd funktion (syntaxen kan være lidt forskellig måske).

Håber du kan bruge det.

/stoffer
Avatar billede stoffer Nybegynder
16. september 2010 - 06:24 #2
Hey. Hele query'en i MSSQL her:

DECLARE @Week int
SET @Week = 38

DECLARE @FirstDayOfWeek DATETIME
SET @FirstDayOfWeek = (select DateAdd(week, @Week- 1,'1/1/' + CAST(DATEPART(yy,getdate()) as varchar(4))))


SELECT * FROM nop_order WHERE (CAST(DATEPART(year,createdon) as char(4)) + '-' + CAST(DATEPART(week,createdon) as char(2))) = (CAST(DATEPART(year,@FirstDayOfWeek) as char(4)) + '-' + CAST(DATEPART(week,@FirstDayOfWeek) as char(2)))
Avatar billede stoffer Nybegynder
16. september 2010 - 06:33 #3
En lille ting. som sagt ved jeg ikke hvordan unix time stamp ser ud.

Men fremgangsmåden er det samme

1) Find en dato inden for den uge du efterspørger (dateadd)
2) Converter dato i din database til åååå-uu (format)
3) String comparison 'åååå-uu' = 'åååå-uu'

Hvis din db har Format funktion så er det ret simpelt. Det har mssql desværre ikke. Derfor den lidt komplekse én.
Avatar billede showsource Seniormester
16. september 2010 - 06:50 #4
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

SELECT WEEK(FROM_UNIXTIME(feltnavn)) as uge, YEAR(FROM_UNIXTIME(feltnavn)) as aar FROM tabel

På linket, så bemærk hvordan WEEK() fungerer.
Avatar billede stoffer Nybegynder
16. september 2010 - 07:04 #5
Hey. Det var da simpelt. Jeg skifter til mysql :P
Avatar billede dj-sejler Praktikant
22. september 2010 - 11:38 #6
Mange tak for hjælpen - har desværre valgt at benytte en anden metode der løser samme problem, men smid gerne et svar showsource - det virker til at være en fornuftig metode
Avatar billede showsource Seniormester
22. september 2010 - 11:52 #7
ok
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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