Tengo una columna en mi base de datos mySQL que tiene algunas filas. Una de esta fila es una FECHA, como esta:2012-02-01
Lo que quiero lograr es hacer un SELECT con PHP basado solo en el año y el mes.
La lógica del SELECT será la siguiente:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
El mes y año específicos se pasarán de una $_POST
variable, como esta$_POST['period']="2012-02";
¿Cómo puedo hacerlo?
Respuestas:
fuente
EXTRACT(YEAR_MONTH FROM Date)
?Si usted tiene
Primero, encuentre el primer día del mes:
Entonces esta consulta usará un índice
Date
si tiene uno:También se podrían usar intervalos inclusivos-exclusivos, que funcionan bastante bien (no tiene que preocuparse si la columna es
DATE
,DATETIME
oTIMESTAMP
, ni por la precisión:Advertencia de seguridad:
Debe escapar correctamente de estos valores o utilizar declaraciones preparadas. En resumen, use cualquier método recomendado en estos días en PHP, para evitar cualquier problema de inyección de SQL.
fuente
Aqui tienes. Deje la informática a PHP y guarde su DB algo de trabajo. De esta manera, puede hacer un uso efectivo de un índice en la
Date
columna.EDITAR
Olvidé la conversión de la marca de tiempo de Unix.
fuente
$end = strtotime($date .' 1 month - 1 second');
fuente
Suponga que tiene un campo de base de datos created_at donde toma valor de la marca de tiempo. Quiere buscar por año y mes desde la fecha de creación.
fuente
Aquí, ENCUENTRE registro por MES y FECHA en mySQL
Aquí está su valor POST
$_POST['period']="2012-02";
Solo, explota valor por guión
$Period = explode('-',$_POST['period']);
Obtener matriz del valor de explosión:
Array ( [0] => 2012 [1] => 02 )
Poner valor en la consulta SQL:
SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';
Obtenga el resultado por MES y AÑO.
fuente
para obtener los valores de mes y año de la columna de fecha
fuente
Puedes hacer así:
fuente
La lógica será:
El
LIKE
operador seleccionará todas las filas que comienzan con$_POST['period']
seguido de un guión y el día del meshttp://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Alguna información adicional
fuente
Aquí hay una consulta que utilizo y devolverá cada registro dentro de un período como una suma.
Aquí está el código:
Aquí se enumeran cada emp_nr y la suma de las horas mensuales que han acumulado.
fuente
puede hacerlo cambiando $ q a esto:
fuente
Sí, esto está funcionando, pero devuelve una fila solo mientras hay varias filas para recuperar usando solo las columnas seleccionadas. Al igual que SELECT Title, Date FROM mytable DONDE AÑO (Fecha) = 2017 Y MES (Fecha) = 09 devuelve solo una fila.
fuente