只select月份和年份的MySQL
我有我的MySQL数据库中有一些行的列。 其中一行是DATE,如下所示: 2012-02-01
我想实现的只是在一年和一个月内使用PHP做一个SELECT。
SELECT的逻辑如下:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
具体的月份和年份将从$_POST
variables传递,如$_POST['period']="2012-02";
我该怎么做?
SELECT * FROM projects WHERE YEAR(Date) = 2011 AND MONTH(Date) = 5
如果你有
$_POST['period'] = "2012-02";
首先,find月份的第一天:
$first_day = $_POST['period'] . "-01"
那么这个查询将使用Date
如果你有一个索引:
$q = " SELECT * FROM projects WHERE Date BETWEEN '$first_day' AND LAST_DAY( '$first_day' ) " ;
也可以使用包含独占的时间间隔,这很好地工作(你不必担心如果列是DATE
, DATETIME
或TIMESTAMP
,也不必担心精度:
$q = " SELECT * FROM projects WHERE Date >= '$first_day' AND Date < '$first_day' + INTERVAL 1 MONTH " ;
干得好。 将计算留给PHP,并保存你的数据库的一些工作。 这样您可以有效地使用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 );
编辑
忘了Unix时间戳转换。
在这里,查找MONTH和DATE在mySQL中的logging
这是您的POST值$_POST['period']="2012-02";
只是,爆炸值破折号$Period = explode('-',$_POST['period']);
从爆炸值获取数组:
Array ( [0] => 2012 [1] => 02 )
把值放在SQL查询中:
SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';
按月和年获得成果。
$q="SELECT * FROM projects WHERE YEAR(date) = 2012 AND MONTH(date) = 1;
你可以这样做:
$q="SELECT * FROM projects WHERE Year(Date) = '$year' and Month(Date) = '$month'";
逻辑将是:
SELECT * FROM objects WHERE Date LIKE '$_POST[period]-%';
LIKE
操作符将select所有以$_POST['period']
开头,随后是破折号和mont
http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html – 一些额外的信息
从date栏获取月份和年份值
select year(Date) as "year", month(Date) as "month" from Projects
是的,这是工作,但它只返回一行,而有几行只能使用选定的列检索。 像SELECT标题一样,dateFROM mytable WHERE YEAR(Date)= 2017 AND MONTH(Date)= 09只返回一行。