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:

<?php
$tijd = time();
$pageloads = mysql_query("SELECT SUM(pageloads) FROM teller WHERE YEARWEEK(tijd,7)=YEARWEEK('".$tijd."',7)  ");
?>

Bij voorbaat dank!
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:

<?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)");
?>
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?

...
WHERE YEAR(datumveld) = 2009
AND WEEK(datumveld) = 52


ps. En deze twee waarden zijn eenvoudig met PHP uit je timestamp te halen. Die de [php]date()[/php] functie.
<?php
$weeknr = date("W", strtotime(time()));
?>

Dus gewoon met PHP.
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.
Blanche schreef op 27.12.2009 10:05
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:

<?php
$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.
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.
Robert_Deiman schreef op 27.12.2009 10:18
SELECT MIN(time) FROM tabel, met dezelfde where als hierboven. Dat is dan de begindatum (...)
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...

Reageren