mysql - 到期日期为 7 天前,并且没有其他事件

标签 mysql database laravel laravel-4 query-builder

所以我正在检查“标签”是否已在 7 天前过期。但我还想确保在同一查询中没有任何其他标签仍然“有效”。因此,如果还有其他标签与 expiry_date 仍未到的用户关联,请忽略该标签。

我的第一部分工作正常:

$seven_days_ago_start = date('Y-m-d', strtotime('-7 days')) . ' 00:00:01';
$seven_days_ago_end = date('Y-m-d', strtotime('-7 days')) . ' 23:59:59';

$expired_tags = DB::table('tags')
        ->leftJoin('users', 'tags.user_id', '=', 'users.id')
        ->leftJoin('pets', 'pets.id', '=', 'tags.pet_id')
        ->where('tags.active', '=', 1)
        ->whereBetween('tags.expiry_date', array($seven_days_ago_start, $seven_days_ago_end))
        ->select('users.id', 'users.username', 'users.email', 'users.first_name', 'tags.serial_number')
        ->get();

最佳答案

大概是这样

$expired_tags = DB::table('tags')
            ->leftJoin('tags as t', function($join) use ($seven_days_ago_end){
                $join->on('tags.user_id','=','t.user_id')->where('t.expiry_date','>',$seven_days_ago_end);
            })
            ->join('users', function($join){
                $join->on('tags.user_id', '=', 'users.id')->whereNull('t.expiry_date');
            })
            ->leftJoin('pets', 'pets.id', '=', 'tags.pet_id')
            ->where('tags.active', '=', 1)
            ->whereBetween('tags.expiry_date', array($seven_days_ago_start, $seven_days_ago_end))
            ->select('users.id', 'users.username', 'users.email', 'users.first_name', 'tags.serial_number')
            ->get();

关于mysql - 到期日期为 7 天前,并且没有其他事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31795222/

相关文章:

php - 如何使用连接从第 3 级表中获取数据 [Laravel]

mysql - Codeigniter事件记录返回指定行的列名

php - 如何在mysql中插入2条相关记录

java - Derby 数据库插入错误

php - PHP 和 MySQL 之间无法建立连接

mysql - 复合键为空且插入时约束失败

php - Laravel Eloquent - 附加与同步

mysql - 减号运算符给我 mysql 中的错误

mysql - INSERT 期间的 MSSQL 格式日期和时间

php - where 子句中的检查或条件