Php 将所选月份与数据库中保存的日期进行比较

Php 将所选月份与数据库中保存的日期进行比较,php,mysql,codeigniter,Php,Mysql,Codeigniter,我的代码的思想是获取表中在特定月份和年份发生的所有更新行,例如更新发生在:2012年5月。 因为我有两个下拉菜单,显示月份和年份,我想当我选择月份和年份时,所有在所选月份和年份发生的更新行都会显示出来。 有没有人能帮我解决这个问题,我会很高兴的。 提示:数据库中存储的日期格式为(Y-m-d)。提示:不要给我们提示,但要告诉我们全部情况 您的问题的可能解决方案(使用php 5.3+): 您是将其存储为varchar还是日期 如果将其存储为日期列,则可以将$year和$month变量与以下变量进行比

我的代码的思想是获取表中在特定月份和年份发生的所有更新行,例如更新发生在:2012年5月。 因为我有两个下拉菜单,显示月份和年份,我想当我选择月份和年份时,所有在所选月份和年份发生的更新行都会显示出来。 有没有人能帮我解决这个问题,我会很高兴的。
提示:数据库中存储的日期格式为(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();