YEARWEEK()
Ik heb al met google gezocht maar ik kan het niet vinden!
Ik zoek een manier om de yearweek uit een timestamp te halen
Ik wil dat het volgende gaat werken:
Bij voorbaat dank!
Ik zoek een manier om de yearweek uit een timestamp te halen
Ik wil dat het volgende gaat werken:
Code (php)
1
2
3
4
2
3
4
<?php
$tijd = time();
$pageloads = mysql_query("SELECT SUM(pageloads) FROM teller WHERE YEARWEEK(tijd,7)=YEARWEEK('".$tijd."',7) ");
?>
$tijd = time();
$pageloads = mysql_query("SELECT SUM(pageloads) FROM teller WHERE YEARWEEK(tijd,7)=YEARWEEK('".$tijd."',7) ");
?>
Bij voorbaat dank!
Gewijzigd op 01/01/1970 01:00:00 door Repelsteeltje
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week
Ik denk dat je verder zoiets wilt:
Gemakkelijkst is dan de date functie van PHP denk ik te gebruiken, de timestamp mee te geven en de mysql opmaak van de datum.
JE krijgt dan zoiets:
Ik denk dat je verder zoiets wilt:
Gemakkelijkst is dan de date functie van PHP denk ik te gebruiken, de timestamp mee te geven en de mysql opmaak van de datum.
JE krijgt dan zoiets:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$time = time();
$date = date('Y-m-d H:i:s', $time);
$result = mysql_query("SELECT SUM(pageloads) FROM teller WHERE YEAR(time) = YEAR(joutimestamp) AND WEEK(time) = WEEK(joutimestamp)");
?>
$time = time();
$date = date('Y-m-d H:i:s', $time);
$result = mysql_query("SELECT SUM(pageloads) FROM teller WHERE YEAR(time) = YEAR(joutimestamp) AND WEEK(time) = WEEK(joutimestamp)");
?>
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
De YEARWEEK functie in MySQL pas je toe op een DATE veld. Aangezien $tijd bij jou een echte timestamp (het aantal seconden sinds 1-1-1970) is, gaat dat dus niet werken en zul je een andere oplossing moeten zoeken.
Waarom vergelijk je het jaartal en het weeknummer niet apart?
ps. En deze twee waarden zijn eenvoudig met PHP uit je timestamp te halen. Die de date() functie.
Waarom vergelijk je het jaartal en het weeknummer niet apart?
ps. En deze twee waarden zijn eenvoudig met PHP uit je timestamp te halen. Die de date() functie.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Mmm 3 berichten tegelijkertijd. En allemaal verschillend :mrgreen:
Maar het komt allemaal op hetzelde neer. Bepaal in PHP het jaartal en de week en gebruik vervolgens in MySQL de YEAR() en WEEK() functies.
Zie ook even mijn edit..
'Blanche:
Maar het komt allemaal op hetzelde neer. Bepaal in PHP het jaartal en de week en gebruik vervolgens in MySQL de YEAR() en WEEK() functies.
Zoals jullie voorstellen had ik het aanvankelijk ook gemaakt maar dat gaat zo niet werken omdat een week over 2 jaren verdeeld kan zijn .
Als ik dus de gegevens opvraag van een een bepaalde week en jaar dan krijg ik dus een halve week als resultaat.
Gebruik dan een interval. Bepaal bijvoorbeeld de maandag van een week en selecteer vervolgens alle records die binnen 1 week na die datum liggen:
De database houdt zelf al rekening met jaarwisselingen, dus hoef jij dat niet meer te doen.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql = "
SELECT
...
WHERE
datumveld BETWEEN '".$maandag."' AND '".$maandag."' + INTERVAL 1 WEEK
";
?>
$sql = "
SELECT
...
WHERE
datumveld BETWEEN '".$maandag."' AND '".$maandag."' + INTERVAL 1 WEEK
";
?>
De database houdt zelf al rekening met jaarwisselingen, dus hoef jij dat niet meer te doen.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Das op zich wel weer waar, dus dat gaat niet helemaal op. Maar kan je dan niet iets doen waardoor je
MIN en MAX time ophaalt van een bepaalde week, of bepaald wat de startdatum van de week is en daar gewoon 7 dagen bij optellen, is misschien makkelijker.
Dus miss in een subquery:
SELECT MIN(time) FROM tabel, met dezelfde where als hierboven. Dat is dan de begindatum, en dan hoef je alleen nog maar +INTERVAL 7 DAY te gebruiken om de gehele week te bepalen.
MIN en MAX time ophaalt van een bepaalde week, of bepaald wat de startdatum van de week is en daar gewoon 7 dagen bij optellen, is misschien makkelijker.
Dus miss in een subquery:
SELECT MIN(time) FROM tabel, met dezelfde where als hierboven. Dat is dan de begindatum, en dan hoef je alleen nog maar +INTERVAL 7 DAY te gebruiken om de gehele week te bepalen.
'Robert_Deiman:
Dat is niet zeker. Als er geen record voor de eerste dag van die betreffende week bestaat, heb je een probleem. Je selecteert dan direct ook een gedeelte van een volgende week...SELECT MIN(time) FROM tabel, met dezelfde where als hierboven. Dat is dan de begindatum (...)
Het was ook meer bedoeld als voorbeeld, alleen niet als uitwerking. Je hebt gelijk dat het niet klopt zo, maar het ging mij erom dat hij dus moet zien te bepalen wat de datum is van de eerste dag (de maandag neem ik aan) van die betreffende week. Dan is het verder een eitje.
Hoe die dat bepaald, is eigenlijk aan hem, maar goed een voorzetje:
http://www.phphulp.nl/forum/showtopic.php?cat=1&id=55109&lasttopic=1
Hoe die dat bepaald, is eigenlijk aan hem, maar goed een voorzetje:
http://www.phphulp.nl/forum/showtopic.php?cat=1&id=55109&lasttopic=1
Zoals jullie voorstellen vind ik wel een beetje te ingewikkeld. tis eigenlijk gewoon een beetje jammer dat php de weken (nog) niet zo telt zoals wij gewend zijn. Maar ik heb toch maar besloten om die php telwijze aan te houden waarbij week 1, de eerste week is die meer dan 3 dagen in het jaar telt, beginnend op maandag. En die lijkt me compatible met YEARWEEK(tijd,3)
dan krijg ik dus:
Nu vraag ik me eigenlijk alleen nog af of ik dat if-else-gebeuren niet wat korter kan schrijven dan zo?
dan krijg ik dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if ($maand==1)
{
if ($week==52 || $week==53)
{$jaar = $jaar-1;}
else
{}
}
else {}
$pageloads = mysql_query("SELECT SUM(pageloads) FROM teller WHERE
YEARWEEK(tijd,3)='".$jaar.$week."' ");
?>
if ($maand==1)
{
if ($week==52 || $week==53)
{$jaar = $jaar-1;}
else
{}
}
else {}
$pageloads = mysql_query("SELECT SUM(pageloads) FROM teller WHERE
YEARWEEK(tijd,3)='".$jaar.$week."' ");
?>
Nu vraag ik me eigenlijk alleen nog af of ik dat if-else-gebeuren niet wat korter kan schrijven dan zo?
Gewijzigd op 01/01/1970 01:00:00 door repelsteeltje
Ja, zo:
Dus je 2 voorwaarden in 1 gezet (let op de haakjes!).
En alle lege ELSE kan je gewoon weglaten.
Dus je 2 voorwaarden in 1 gezet (let op de haakjes!).
En alle lege ELSE kan je gewoon weglaten.
bedankt vriend





