php - 如何仅查询之前(月和年)的日期? (拉拉维尔)

标签 php mysql laravel

我有这个过滤器可以让用户按月份和年份进行过滤。
$month = $request['month'];
$year = $request['year'];

这是我尝试从表中获取日期和年份之前的所有数据。 例如:获取2019年3月之前的所有数据。
$result = DB::table('a')->select(*)->whereMonth('date','<=',$month)->whereYear('date','<=',$year)->get();

但是上面的查询只给出了 2019 年之前每年 1 月、2 月的结果,而不是 2019 年 3 月之前的每个月的结果

最佳答案

只需与日期文字直接比较:

$result = DB::table('a')
    ->select(*)
    ->where('date', '<', '2019-03-01')
    ->get();

这对应于以下原始 MySQL 查询:

SELECT *
FROM a
WHERE date < '2019-03-01';

请注意,上面的 WHERE 子句是sargable,这意味着可以使用包含 date 列的索引。您建议的以下版本不可控制:

SELECT *
FROM a
WHERE
    YEAR(date) < 2019 OR (YEAR(date) = 2019 AND MONTH(date) < 3);

这是 Laravel 代码:

$result = DB::table('a')
    ->select(*)
    ->whereYear('date', '<', '2019')
    ->orWhere(function($query) {
        $query->whereYear('date', '=', '2019')
               ->whereMonth('date', '<', '3')
    })
    ->get();

关于php - 如何仅查询之前(月和年)的日期? (拉拉维尔),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58585793/

相关文章:

php - 注意第 19 行调用堆栈上的 : Undefined variable: row in . ..uredi.php #TimeMemoryFunctionLocation

mysql - 你能推荐一个免费的 Linux 轻量级 MySQL GUI 吗?

php - 使用 PHP 和网站跟踪 iPhone 应用程序的使用情况

mysql - Laravel 无限滚动

php - Laravel 4 - 需要 Mcrypt 扩展

php - 如何在 pdf 中将绝对定位的元素居中

php - 在 Mac OS Catalina : php_imagick. h:42:10 中安装 imagick 扩展: fatal error : 'php.h' 文件未找到

phpmyadmin : no database selected

mysql - 如何加速这个 DELETE/LEFT JOIN mysql 查询?

php - Laravel 5.5。和 PHP 7