Eu tenho uma coluna em meu banco de dados mySQL que tem algumas linhas. Uma desta linha é uma DATE, assim:2012-02-01
O que pretendo alcançar é fazer um SELECT com PHP baseado apenas no ano e mês.
A lógica do SELECT será a seguinte:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
O mês e ano específicos serão passados de uma $_POST
variável, como este$_POST['period']="2012-02";
Como eu posso fazer isso?
Respostas:
fonte
EXTRACT(YEAR_MONTH FROM Date)
?Se você tem
Primeiro, encontre o primeiro dia do mês:
Então, esta consulta usará um índice,
Date
se você tiver um:Também é possível usar intervalos inclusivos exclusivos, que funcionam muito bem (você não precisa se preocupar se a coluna é
DATE
,DATETIME
ouTIMESTAMP
, nem sobre a precisão:Aviso de segurança:
Você deve escapar adequadamente desses valores ou usar instruções preparadas. Resumindo, use qualquer método recomendado atualmente em PHP, para evitar problemas de injeção de SQL.
fonte
Aqui está. Deixe a computação para o PHP e salve seu banco de dados algum trabalho. Dessa forma, você pode fazer uso eficaz de um índice na
Date
coluna.EDIT
Esqueceu a conversão de carimbo de data / hora Unix.
fonte
$end = strtotime($date .' 1 month - 1 second');
fonte
Suponha que você tenha um campo de banco de dados created_at Onde você obtém valor do carimbo de data / hora. Você deseja pesquisar por ano e mês a partir da data de criação.
fonte
Aqui, ENCONTRAR registro por MONTH e DATE em mySQL
Aqui está o seu valor POST
$_POST['period']="2012-02";
Explodir o valor pelo traço
$Period = explode('-',$_POST['period']);
Obtenha a matriz do valor de explosão:
Array ( [0] => 2012 [1] => 02 )
Coloque valor na consulta SQL:
SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';
Obtenha o resultado por mês e ano.
fonte
para obter os valores de mês e ano da coluna de data
fonte
Você pode fazer assim:
fonte
A lógica será:
O
LIKE
operador selecionará todas as linhas que começam com$_POST['period']
seguido pelo traço e o dia do mêshttp://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Algumas informações adicionais
fonte
Aqui está uma consulta que utilizo e ela retornará cada registro dentro de um período como uma soma.
Aqui está o código:
Isso lista cada emp_nr e a soma das horas mensais que eles acumularam.
fonte
você pode fazer isso alterando $ q para este:
fonte
Sim, isso está funcionando, mas retorna apenas uma linha enquanto houver várias linhas para recuperar usando apenas as colunas selecionadas. Como SELECT Title, Date FROM mytable WHERE YEAR (Date) = 2017 AND MONTH (Date) = 09 retorna apenas uma linha.
fonte