我的 Sql 查询以获取所选月份和年份的所有先前记录

My Sql Query to get All previous records from Selected Month And year

我想从我的 mysql table 中获取所选月份和年份的所有先前记录。 例如,如果我选择的月份和年份是 08-2018,那么查询应该显示 2018 年 8 月以来的所有先前记录。

我试过这个 mysql 查询:

"select * form tblusers where year(created_date)<=2018 and month(created_date)<'08'";

但它不包括我的月份大于 8 时的记录,例如 09-2017 等

试试这个:

select * form tblusers where  month(created_date)<8 and year(created_date)<=2018
SELECT * FROM tblusers WHERE YEAR(created_date)<='2018' AND MONTH(created_date)<='08';

试试这个也等于月份 + 你的 sql 语法在单词 "from" 中有错误(但我想只要你得到结果就不是错误。

根据您在此处设置的内容,您的查询工作正常。它不应该 return 结果高于 08 个月,这实际上是你的情况:

month(created_date)<'08' 

这意味着如果您的值为 09,10,11 ... 它不符合您的条件,因为它高于 08。

我更喜欢创建复合值

select * from tblusers where 
(year(created_date) * 12 +  month(created_date))
<= 2018 * 12 + 8;

你可以尝试更简单的方法:

获取记录 created_date 小于所选月份和年份的第一个日期。

如果您的 created_date 字段是 Date 类型,那么您可以尝试以下操作:

"select * form tblusers where created_date < '2018-08-01'"

如果您的 created_date 字段是 Datetime 类型,那么您可以尝试以下操作:

"select * form tblusers where created_date < '2018-08-01 00:00:00'"

希望对您有所帮助:

像这样使用 CI 查询生成器 class :

$year = '2018';
$month = '08';
$query = $this->db->from('tblusers')
         ->where('MONTH(created_date) <', $month)
         ->where('YEAR(created_date) <=', $year)
         ->get();
if ($query->num_rows() > 0) 
{
  print_r($query->result());
}

echo $this->db->last_query();

更好的使用方式:

$date = '2017-09-01';
$query = $this->db->from('tblusers')
         ->where('DATE(created_date) >=', $date)
         ->get();

更多:https://codeigniter.com/user_guide/database/query_builder.html