solo - obtener el mes de una variable fecha en php
Seleccione mySQL basado solo en mes y año (10)
Aquí hay una consulta que utilizo y devolverá cada registro dentro de un período como una suma.
Aquí está el código:
$result = mysqli_query($conn,"SELECT emp_nr, SUM(az)
FROM az_konto
WHERE date BETWEEN ''2018-01-01 00:00:00'' AND ''2018-01-31 23:59:59''
GROUP BY emp_nr ASC");
echo "<table border=''1''>
<tr>
<th>Mitarbeiter NR</th>
<th>Stunden im Monat</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
$emp_nr=$row[''emp_nr''];
$az=$row[''SUM(az)''];
echo "<tr>";
echo "<td>" . $emp_nr . "</td>";
echo "<td>" . $az . "</td>";
echo "</tr>";
}
echo "</table>";
$conn->close();
?>
Esto enumera cada emp_nr y la suma de las horas mensuales que han acumulado.
Tengo una columna en mySQL DB que tiene algunas filas. Una de esta fila es una FECHA, como esta: 2012-02-01
Lo que quiero lograr es hacer un SELECTO con PHP basado solo en el año y el mes.
La lógica de SELECT será la siguiente:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
El mes y el año específicos se $_POST[''period'']="2012-02";
partir de una variable $_POST
, como este $_POST[''period'']="2012-02";
¿Cómo puedo hacerlo?
Aquí, FIND registra por MES y FECHA en mySQL
Aquí está su valor POST $_POST[''period'']="2012-02";
Justo, explota el valor por guión $Period = explode(''-'',$_POST[''period'']);
Obtener matriz a partir 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.
Aqui tienes. Deje la computación en PHP y guarde su DB un poco de trabajo. De esta manera puede hacer un uso efectivo de un índice en la columna Date
.
<?php
$date = $_POST[''period''];
$start = strtotime($date);
$end = strtotime($date . '' 1 month - 1 second'');
$query = sprintf(
''SELECT *
FROM projects
WHERE Date BETWEEN FROM_UNIXTIME(%u) AND FROM_UNIXTIME(%u)'',
$start,
$end
);
EDITAR
Olvidé la conversión de marca de tiempo de Unix.
La lógica será:
SELECT * FROM objects WHERE Date LIKE ''$_POST[period]-%'';
El operador LIKE
seleccionará todas las filas que comiencen con $_POST[''period'']
seguido por el guión y el día del mont.
http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Alguna información adicional
Puedes hacer así:
$q="SELECT * FROM projects WHERE Year(Date) = ''$year'' and Month(Date) = ''$month''";
Sí, esto funciona, pero solo devuelve una fila, mientras que hay varias filas que recuperar solo con columnas seleccionadas. Al igual que SELECT Título, Fecha FROM mytable DONDE AÑO (Fecha) = 2017 Y MES (Fecha) = 09 devuelve solo una fila.
Si usted tiene
$_POST[''period''] = "2012-02";
Primero, encuentra el primer día del mes:
$first_day = $_POST[''period''] . "-01"
Entonces esta consulta usará un índice en Date
si tiene uno:
$q = "
SELECT *
FROM projects
WHERE Date BETWEEN ''$first_day''
AND LAST_DAY( ''$first_day'' )
" ;
También se pueden usar intervalos exclusivos e inclusivos, que funcionan bastante bien (no tiene que preocuparse si la columna es DATE
, DATETIME
o TIMESTAMP
, ni sobre la precisión:
$q = "
SELECT *
FROM projects
WHERE Date >= ''$first_day''
AND Date < ''$first_day'' + INTERVAL 1 MONTH
" ;
Advertencia de seguridad:
Debe escaparse correctamente de estos valores o usar declaraciones preparadas. En resumen, utilice el método recomendado actualmente en PHP para evitar problemas de inyección de SQL.
para obtener los valores de mes y año de la columna de fecha
select year(Date) as "year", month(Date) as "month" from Projects
$q="SELECT * FROM projects WHERE YEAR(date) = 2012 AND MONTH(date) = 1;
SELECT * FROM projects WHERE YEAR(Date) = 2011 AND MONTH(Date) = 5