Si vous voulez le faire directement avec MySQL serait un peu compliqué. Comme Vatev vous recommandé devez calculer la date d'étoile de date à l'avance, mais si vous voulez vraiment faire cela, vous aurez probablement besoin de fonctions suivantes:
F IRST de tout ce que vous avez besoin devrait compter combien de semaines, vous devriez revenir en arrière, c'est facile ... Pour vous one week = 5 days
, cela signifie
weeks = FLOOR(days/5)
Nous avons pris soin de semaines, donc nous allons maintenant travailler avec le reste:
rest = days MOD 5
maintenant, nous avons deux cas, le week-end a eu lieu ou non, pour le cas où il n'y avait pas de jours de week-end sont bons. Nous devons ajouter 2 jours pour l'ignorer. Le week-end a eu lieu si (WEEKDAY(now) - rest) < 0
rest = IF((WEEKDAY(now) - rest) < 0, rest + 2, rest)
Et maintenant, nous pouvons construire une par (supposons que vous avez {days}
et {rest}
précalculée):
WHERE date >= ADD_DATE(
ADD_DATE (
{now},
INTERVAL -IF((WEEKDAY({now}) - {rest}) < 0, {rest} + 2, {rest}) DAYS,
),
INTERVAL -FLOOR({days}/5) WEEKS
)
merci pour l'explication détaillée. Comme Vatev l'a souligné, je pense que je vais calculer le jour de départ dans ma demande pour mettre un peu de stress de la DB. – Thomas
Le stress sur la base de données de cette opération sera négligeable, mais il y aura probablement beaucoup moins de stress pour vous si vous le faites dans une langue plus saine: P – Vatev
@Thomas je l'ai écrit afin que je sois réutilisable pour toute autre langue , en particulier PHP accepte (dans ['strtotime'] (http://php.net/manual/fr/function.strtotime.php)) intervalles et la logique est la même. Vous pouvez même faire 'timestamp() - weeks * 7days * 24hour * 3600seconds' pour économiser quelques petites ressources. – Vyktor