簡體   English   中英

到期日期是7天前,並且沒有其他活動

[英]Where expiry date is 7 days ago, and there are no others active

因此,我正在檢查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();

您可以編寫子查詢來提取仍處於活動狀態的標簽:

SELECT tags.id
FROM tags
WHERE tags.expiry_date > $seven_days_ago_end;

然后,使用NOT IN運算符來確保您不拉那些標簽。 您可以將此條件放入聯接中:

JOIN users ON tags.user_id = users.id AND tags.id NOT IN(...);

我對Laravel沒有經驗,所以我不確定如何為您轉換它,但是我希望這能使您走上正確的道路。

也許像這樣

$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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM