2009-10-28 5 views
0

J'ai un problème pour interroger des enregistrements dans MySQLrequête mysql par date de l'année

explication ci-dessous L'utilisateur pourrait choisir une date à attribuer à fromdate variable et todate

exemple.

$fromdate = 2008/01/01 
$todate = 2009/10/31 

Dans le cas ci-dessus, je dois boucle et requête avec les suivants:

SELECT * FROM table where date BETWEEN '2008/01/01' AND '2008/12/31'; 

deuxième boucle

SELECT * FROM table where date BETWEEN '2009/01/01' AND '2009/10/31'; 

si $fromdate et $todate est plus d'un an alors je dois limiter ma requête par an Mais si moins d'un an, utilisez $fromdate et $todate dans la requête.

Merci à l'avance

Tirso

+0

Alors, quelle est exactement la question/problème? La formulation de la requête ou autre chose? –

Répondre

1

Vous pouvez utiliser quelque chose comme ceci pour calculer la date.

$d1 = new DateTime($todate); 
$d2 = new DateTime($fromdate); 
$d2->modify("+1 year"); 
$min = min($d1, $d2); 
$todate = $min->format('Y/m/d'); 

Si vous souhaitez paginer les résultats, vous devrez modifier $fromdate sur chaque page avant de faire le calcul $todate. Par exemple, si vous êtes sur la deuxième page, la première charge $fromdate dans un objet DateTime et ajouter un an, si vous êtes sur la troisième page, ajouter deux ans, etc.

2

Pas tout à fait sûr de ce que vous voulez dire, mais pouvez-vous ne pas utiliser la fonction mysql Year?

quelque chose comme:

SELECT * FROM table WHERE YEAR(`yourdatefield`) = '2008' 

ou

SELECT * FROM table WHERE YEAR(`yourdatefield`) BETWEEN '2008' AND '2009'; 
1

D'abord et avant tout, le format des dates dans MySQL est AAAA-MM-JJ (pas AAAA/MM/JJ), alors assurez-vous vous faites ça bien. C'est peut-être pourquoi vous voyez de mauvais résultats.

BETWEEN fonctionne très bien avec des dates (correctement formatées). Exemple de requête:

SELECT * FROM table WHERE date BETWEEN '2008-05-12' AND '2009-04-23';