2008-12-26 8 views
2

Colonne MySQL> sdate, edate (ses 2 colonnes). Sdate est la date de début du projet et edate est la date de fin de la fin du projet.2 Colonne Mysql Plage de dates Recherche en PHP

donc je dois faire de la recherche entre eux ..

<strong>Search</strong><br /> 
<form method="post" action="search.php"> 
    Start Report Date : <input type="text" name="sdate" /> 
    End Report Date : <input type="text" name="edate" /> 
    <input type="submit" name="Submit" value="Search" /> 
</form> 

This is example data in mysql 
sdate    Project Name  edate 
22 December 2008 project 1   23 December 2008 
25 December 2008 project 2   26 December 2008 
24 December 2008 project 3   27 December 2008 
1 January 2008 project 4   20 January 2008 
10 December 2008 project 5   12 December 2008 

donc laisser dire un utilisateur sdate entré (par exemple, le 22 Décembre 2008) et MOIS.DECALER (par exemple, le 30 Décembre 2008).

Il doit afficher

22 December 2008 project 1   23 December 2008 
25 December 2008 project 2   26 December 2008 
24 December 2008 project 3   27 December 2008 

donc je besoin d'un code php requête SQL qui devrait afficher les entrées se trouve entre ces 2 dates ..

S'il vous plaît aidez-moi ..

Merci beaucoup.

+0

veuillez également afficher le schéma de la table! – hop

Répondre

3

en supposant que votre sdate et edate sont de type colonnes MySQL DATE vous pouvez effectuer les opérations suivantes:

SELECT 
    Project_Name 
, sdate 
, edate 
FROM your_table 
WHERE 
    sdate <= '2008-12-26' 
AND 
    edate >= '2008-12-26' 

ou vous pouvez utiliser DATEDIFF

SELECT 
    Project_Name 
, sdate 
, edate 
FROM your_table 
WHERE 
    DATEDIFF(sdate, '2008-12-26') <= 0 
AND 
    DATEDIFF(edate, '2008-12-26') >= 0 

Le premier est plus efficace car MySQL peut comparer toutes les lignes de votre table à une valeur statique. Pour la deuxième solution, il doit calculer la différence pour chaque ligne de votre tableau.

Si vos colonnes sdate et edate ne sont pas des colonnes DATE, vous n'avez pas de chance et vous devez les modifier en premier.

0

Il semble qu'une simple requête select avec une clause "where" peut faire l'affaire.

Peuso-code:

select sdate, name, edate 
from your_table 
where sdate >= '22 December 2008' and edate <= '30 December 2008' 
+0

MySQL ne prend en charge que YYYY-MM-DD ou YY-MM-DD dans les littéraux de date.Pour utiliser des formats comme ceux ci-dessus, vous devez l'analyser en utilisant la fonction STR_TO_DATE(). –

+0

ressemble à l'OP utilise une colonne varchar pour la date, bien que ... – hop

0

En aparté, pour aider à l'interface utilisateur, je vous recommandons d'utiliser la méthode phps de strtotime() ... il fait pour les dates qui entrent très flexibles

0

Première utilisation mktime() sur l'entrée de l'utilisateur

$time = mktime(format from user); 

puis faire

SELECT Project_Name, sdate, edate FROM table WHERE 
    UNIX_TIMESTAMP(STR_TO_DATE(sdate, '%e %m %Y')) <= '$time' 
AND 
    UNIX_TIMESTAMP(STR_TO_DATE(edate, '%e %m %Y')) >= '$time' 

Cela devrait fonctionner.

0

SELECT project_name, sdate, MOIS.DECALER des projets OÙ sdate < = $ _POST [ 'MOIS.DECALER'] ET MOIS.DECALER> = $ _POST [ 'sdate']

Vous donne tout projet avec la date de début et de fin date qui chevauche la date de début et la date de fin du formulaire. (en supposant que le format sdate et edate sont dans le bon format)

Questions connexes