Sélectionnez mySQL basé uniquement sur le mois et l'année
J'ai une colonne dans ma base mySQL qui a quelques lignes. De cette ligne est une DATE, comme ceci: 2012-02-01
Ce que je veux atteindre est de faire un SELECT avec PHP basé uniquement sur l'année et le mois.
La logique de la sélection seront les suivants:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
Le mois et l'année sera être transmises à partir d'un $_POST
variable, comme ceci $_POST['period']="2012-02";
Comment puis-je le faire?
- Vous pouvez utiliser la ENTRE la déclaration
Vous devez vous connecter pour publier un commentaire.
EXTRACT(YEAR_MONTH FROM Date)
?Si vous avez
Tout d'abord, trouver le premier jour du mois:
Ensuite cette requête va utiliser un index sur
Date
si vous en avez un:On peut aussi utiliser inclusive exclusive des intervalles, qui fonctionne assez bien (vous n'avez pas à vous inquiéter si la colonne est
DATE
,DATETIME
ouTIMESTAMP
, ni sur la précision:Avertissement de sécurité:
Vous devriez échapper à ces valeurs ou d'utiliser les requêtes préparées. En bref, utiliser quelle que soit la méthode recommandée de ces jours dans le PHP, afin d'éviter toute injection SQL questions.
Ici vous allez. Laissez le calcul de PHP et de sauvegarder votre base de données de quelques travaux. De cette façon, vous pouvez faire une utilisation efficace d'un index sur la
Date
colonne.MODIFIER
Oublié le timestamp Unix de conversion.
$end = strtotime($date .' 1 month - 1 second');
Vous pouvez le faire comme ceci:
Ici, RECHERCHER l'enregistrement par MOIS et la DATE dans mySQL
Ici est votre valeur POST
$_POST['period']="2012-02";
Juste, exploser valeur par dash
$Period = explode('-',$_POST['period']);
Obtenir de tableau à partir d'exploser valeur :
Array
(
[0] => 2012
[1] => 02
)
De mettre en valeur dans la Requête SQL:
SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';
Obtenez le Résultat par le MOIS et l'ANNÉE.
La logique:
La
LIKE
opérateur de sélectionner toutes les lignes qui commencent par$_POST['period']
suivi par tableau de bord et le jour de la monthttp://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Quelques informations supplémentaires
pour obtenir le mois et l'année de valeurs de la colonne de la date de
Supposons que vous avez un champ de base de données created_at Où vous prenez la valeur d'horodatage.
Vous souhaitez faire une recherche par Année & Mois de created_at date.
Ici est une requête que j'utilise et il sera de retour chaque enregistrement dans un délai aussi une somme.
Voici le code:
Cette liste chaque emp_nr et la somme mensuelle des heures de travail qu'ils ont accumulé.
Ouais c'est du travail, mais il retourne la ligne alors qu'il y a plusieurs lignes à extraire à l'aide de colonnes sélectionnées uniquement.
Comme SÉLECTIONNER le Titre,la Date from mytable where year(Date)=2017 ET le MOIS(Date)=09
retourne une seule ligne.