Php 将所选月份与数据库中保存的日期进行比较
我的代码的思想是获取表中在特定月份和年份发生的所有更新行,例如更新发生在:2012年5月。 因为我有两个下拉菜单,显示月份和年份,我想当我选择月份和年份时,所有在所选月份和年份发生的更新行都会显示出来。 有没有人能帮我解决这个问题,我会很高兴的。Php 将所选月份与数据库中保存的日期进行比较,php,mysql,codeigniter,Php,Mysql,Codeigniter,我的代码的思想是获取表中在特定月份和年份发生的所有更新行,例如更新发生在:2012年5月。 因为我有两个下拉菜单,显示月份和年份,我想当我选择月份和年份时,所有在所选月份和年份发生的更新行都会显示出来。 有没有人能帮我解决这个问题,我会很高兴的。 提示:数据库中存储的日期格式为(Y-m-d)。提示:不要给我们提示,但要告诉我们全部情况 您的问题的可能解决方案(使用php 5.3+): 您是将其存储为varchar还是日期 如果将其存储为日期列,则可以将$year和$month变量与以下变量进行比
提示:数据库中存储的日期格式为(Y-m-d)。提示:不要给我们提示,但要告诉我们全部情况 您的问题的可能解决方案(使用php 5.3+):
您是将其存储为varchar还是日期
如果将其存储为日期列,则可以将$year和$month变量与以下变量进行比较:
从表中选择*,其中年(datecol)>year或年(datecol)=$year和月(datecol)>=month)代码>
如果是子字符串,则必须对大于进行一些有趣的转换,但可以使用子字符串查找精确匹配:
从表中选择*,其中子字符串u索引(stringcol,'-',1)>year或(子字符串u索引(stringcol,'-',1)=year和子字符串u索引(子字符串u索引(stringcol,'-',2),'-',1)>=month)代码>
问题是MySQL没有内置字符串拆分函数。如果它存储为日期,则可以使用比较(如@John shows)而不是在列上运行函数来提取数据。请注意,mysql无法索引函数,因此year(datecol)将进行表扫描。同意,有不同的方法可以剥猫皮。
<?php
$startDate = date("Y-m-d", strtotime("first day of the month", strtotime( (int) $_POST['year']."-".(int)$_POST['month'].-"01 00:00")));
$endDate = date("Y-m-d", strtotime("last day of the month", strtotime( (int) $_POST['year']."-".(int)$_POST['month'].-"01 23:59")));
$db = ; //your PDO connection
$q = $db->prepare("SELECT `thingstoselect` FROM `yourtable` WHERE `date` > ? && `date` < ?");
$q->execute( array( $startDate, $endDate));
$yourResults = $q->fetchAll();