2010-10-12 8 views
0

Je suis un novice dans le codage PHP MySQL & et travaille toujours mon chemin à travers elle .. Donc, peu d'aide sur ce sera beaucoup apprécié:Rechercher dans la base de données MySQL fonction de la date Range fournie par l'utilisateur

I avoir une table qui conserve l'enregistrement de certains événements. Voici comment ma table ressemble à:

Id - Event_Name - Event_Date - Event_Charges 
--------------------------------------------- 
1 - Event 1 - 10/10/2010 - $100 
2 - Event 2 - 10/31/2010 - $200 
3 - Event 3 - 11/12/2010 - $150 
4 - Event 4 - 12/01/2010 - $175 

L'objectif ici est de lister le nom des événements et totaliser les charges pour une plage de dates particulière ...

Ma forme frontale ressemble à ceci:

From Date: ____________ 
To Date: ______________ 

L'utilisateur saisit ces deux champs et je suis supposé lister les événements tombant dans cette plage de dates, et additionner les frais.

Veuillez noter que le champ Event_Date n'est pas du type de champ "date" dans MySQL. Devrais-je avoir le champ Event_Date du type de champ "date".

+0

EventDate est une chaîne? –

+0

Jusqu'à présent, oui c'est une chaîne .. Je suppose que les opérations seront plus faciles si je le convertis en DATETIME, DATE ou TIMESTAMP comme d'autres le suggèrent ... –

Répondre

3

Pour utiliser les opérations de date, le type de données event_date doit être:

  • DATETIME
  • DATE
  • TIMESTAMP

Une fois que c'est en place, vous pouvez utiliser :

SELECT t.event_name, 
     SUM(t.event_charges) AS total_charges 
    FROM YOUR_TABLE t 
    WHERE t.event_date BETWEEN STR_TO_DATE($from_date, '%Y-%m-%d') 
          AND STR_TO_DATE($to_date, '%Y-%m-%d') 
GROUP BY t.event_name 

... ce qui soulève le problème de vous obliger à appliquer un format de date. C'est pourquoi j'ai fourni un exemple en utilisant STR_TO_DATE, donc la chaîne du formulaire HTML est convertie en un type de données MySQL DATETIME pour comparaison.

+0

Merci! Cela a fonctionné comme un charme, cependant, j'ai encore une question .. Est-il important d'utiliser la fonction STR_TO_DATE, j'ai déjà le format pris en charge dans la forme frontale par JavaScript .. Merci beaucoup! –

+0

@Jasdeep Singh: STR_TO_DATE assure que la valeur sera convertie en une valeur MySQL DATETIME (en supposant que la valeur corresponde au format spécifié). Les formats de date ne sont pas cohérents, je recommande donc de l'utiliser. –

+0

Mais comment se fait-il que j'obtienne une sortie vide quand j'utilise STR_TO_DATE ??? et tout va bien quand je ne l'utilise pas? –

0

Ok, donc je l'ai fait une tête cognant et ce que je suis venu avec:

SELECT t.event_name, SUM (t.event_charges) AS total_charges DE YOUR_TABLE t OÙ t.event_date1 ENTRE STR_TO_DATE ($ from_date, '% Y-% m-% d') ET STR_TO_DATE ($ to_date, '% Y-% m-% d') OU t.event_date2 ENTRE STR_TO_DATE ($ from_date, '% Y-% m -% d ') ET STR_TO_DATE (to_date de $, '% Y-% m-% d') GROUP BY t.event_name

Cela fonctionne comme un charme pour mon Rapport! Merci beaucoup!!