2 Colonne Mysql Recherche par période en PHP
Question
colonne MySQL> sdate, MOIS.DECALER (la colonne 2).
sdate est la date de début pour le démarrage du projet et MOIS.DECALER est date de fin de fin de projet.
donc je dois faire 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
Alors disons que l'utilisateur est entré sdate (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
Alors 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 ..
La solution
en supposant que votre sdate
et edate
sont de type colonnes MySQL DATE
vous pouvez faire ce qui suit:
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 table.
Si vos colonnes sdate
et edate
ne sont pas les colonnes DATE, vous êtes hors de la chance et que vous devez les changer d'abord.
Autres conseils
Il semble que d'une simple requête select avec une clause « où » peut faire l'affaire.
Peuso-code:
select sdate, name, edate
from your_table
where sdate >= '22 December 2008' and edate <= '30 December 2008'
En aparté, pour aider à l'interface utilisateur, je recommande d'utiliser phps méthode strtotime () ... il fait pour les dates entrer dans très flexibles
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.
SELECT project_name, sdate, MOIS.DECALER des projets OÙ sdate <= $ _POST [ 'MOIS.DECALER'] ET MOIS.DECALER> = $ _POST [ 'sdate']
Vous donne tout projet date de début et de fin qui se chevauchent la date de début du formulaire et la date de fin. (En supposant que la forme sdate et MOIS.DECALER sont dans le format)