J'ai une colonne dans ma base de données mySQL qui contient quelques lignes. L'une de ces lignes est un DATE, comme ceci:2012-02-01
Ce que je veux réaliser est de faire un SELECT avec PHP basé uniquement sur l'année et le mois.
La logique du SELECT sera la suivante:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
Le mois et l'année spécifiques seront transmis à partir d'une $_POST
variable, comme celle-ci$_POST['period']="2012-02";
Comment puis-je le faire?
Réponses:
la source
EXTRACT(YEAR_MONTH FROM Date)
?Si tu as
Tout d'abord, recherchez le premier jour du mois:
Ensuite, cette requête utilisera un index
Date
si vous en avez un:On pourrait également utiliser des intervalles inclusifs exclusifs, qui fonctionnent plutôt bien (vous n'avez pas à vous soucier de savoir si la colonne est
DATE
,DATETIME
ouTIMESTAMP
, ni sur la précision:Avertissement de sécurité:
Vous devez correctement échapper ces valeurs ou utiliser des instructions préparées. En bref, utilisez la méthode recommandée de nos jours en PHP, pour éviter tout problème d'injection SQL.
la source
Voici. Laissez le calcul à PHP et enregistrez votre base de données. De cette façon, vous pouvez utiliser efficacement un index sur la
Date
colonne.EDIT
J'ai oublié la conversion d'horodatage Unix.
la source
$end = strtotime($date .' 1 month - 1 second');
la source
Supposons que vous ayez un champ de base de données created_at où vous prenez la valeur de l'horodatage. Vous souhaitez effectuer une recherche par année et par mois à partir de la date created_at.
la source
Ici, TROUVEZ l'enregistrement par MOIS et DATE dans mySQL
Voici votre valeur POST
$_POST['period']="2012-02";
Juste, exploser la valeur par tiret
$Period = explode('-',$_POST['period']);
Obtenez le tableau à partir de la valeur d'explosion:
Array ( [0] => 2012 [1] => 02 )
Mettez de la valeur dans la requête SQL:
SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';
Obtenez le résultat par MOIS et ANNÉE.
la source
pour obtenir les valeurs du mois et de l'année à partir de la colonne de date
la source
Vous pouvez faire comme ceci:
la source
La logique sera:
L'
LIKE
opérateur sélectionnera toutes les lignes commençant par$_POST['period']
suivi d'un tiret et du jour du monthttp://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Quelques informations supplémentaires
la source
Voici une requête que j'utilise et elle renverra chaque enregistrement dans une période sous forme de somme.
Voici le code:
Cela répertorie chaque emp_nr et la somme des heures mensuelles qu'ils ont accumulées.
la source
vous pouvez le faire en remplaçant $ q par ceci:
la source
Oui, cela fonctionne, mais cela ne renvoie qu'une seule ligne alors qu'il y a plusieurs lignes à récupérer en utilisant uniquement les colonnes sélectionnées. Comme SELECT Title, Date FROM mytable WHERE YEAR (Date) = 2017 AND MONTH (Date) = 09 renvoie une seule ligne.
la source