2009-10-25 5 views
0

Je suis en train de créer un mini-SGC où les nouvelles ajoutées sont triées en utilisant une colonne de type DATE, par ex. INSERT date_posted=NOW(), etc.Catégories mensuelles avec MySQL DATE Type

Je peux alors facilement énumérer tous les mois disponibles avec: SELECT DATE_FORMAT(date_posted, '%M %Y') as date_posted. Cela rend la liste des catégories mensuelles.

Le problème que j'ai est avec affichant toutes les nouvelles par un mois particulier. J'ai essayé de passer la variable date_posted dans l'URL mais je n'ai pas réussi à l'incorporer dans ma requête. Si par exemple, j'essaie WHERE date_posted=\"2009-10-16\", le résultat est toutes les nouvelles de ce jour. WHERE date_posted=\"2009-10\" ne fonctionne pas d'autre part.

J'ai passé ce paramètre dans l'URL DATE_FORMAT(date_posted, '%M%Y') as month qui résume en octobre 2009 par exemple. Alors WHERE date_posted = $ mois ne renvoie rien car premièrement je suppose que c'est dans le mauvais format, deuxièmement, le type de données MySQL ne sort pas ce que je veux comme en témoigne l'exemple codé en dur mentionné ci-dessus.

Veuillez nous aider, Merci!

Répondre

3

Vous devez utiliser une plage dans votre where clause:

where date_posted >= cast('2009-10-01' as date) 
    and date_posted < cast('2009-11-01' as date) 

Pour obtenir les "2009-10-01" et "2009-11-01" dates, vous pouvez utiliser strtotime et date PHP fonctions:

$date_from_querystring = "2009-10"; 
$start_date = $date_from_querystring . "-01"; 
$end_date = date("Y-m-d", strtotime($start_date . " +1 month")); 

vous pouvez également utiliser les fonctions year et month, mais vous n'obtiendrez aucun avantage d'indices que vous pourriez être en mesure d'utiliser, il est donc généralement pas aussi bonne solution que la gamme. Un exemple:

where year(date_posted) = 2009 and month(date_posted) = 10 
+0

C'est génial mais je me perds dans la partie "catégorie" actuelle. Par exemple, comment est-ce que je changerais dynamiquement ces deux pour chaque mois suivant comme octobre 2009 obtient ceci, évidemment mais comment cela changerait-il pour janvier 2010? Merci. – MrSplashyPants

+0

Je pense que l'année et le mois fonctionneraient. Juste que la chaîne $ month = october2009 devrait être disséquée pour pouvoir le faire là où la fonction utilisée serait ...? : D – MrSplashyPants

+0

Génial! Donc, il est sorti à ce jour («Y-m», strtotime ($ mois)); Merci beaucoup pour votre aide, Monsieur! J'avais essayé de le faire moi-même pendant les 7 dernières heures mais j'ai finalement abandonné et demandé ici. Vraiment apprécier votre aide! :) – MrSplashyPants

Questions connexes