SQL查询以筛选出已收到电子邮件的用户

SQL查询以筛选出已收到电子邮件的用户,sql,email,select,laravel-4,filter,Sql,Email,Select,Laravel 4,Filter,假设: 您试图发送一封群发邮件,但出现了问题,只有一些用户收到了邮件 您最近发送了一封群发邮件,但现在新用户已经注册,他们也需要接收邮件 如何过滤那些已经收到新闻的人(通过雄辩的查询或数据库中的select命令) 实际上,我在一个基于Laravel4的项目中遇到了这个问题,我正在pivot表上使用LaravelElount搜索一个查询,并跟踪发送给用户的电子邮件 在我的例子中,有两个模型:Post和User 这是一种多对多关系:任何用户都可以收到许多帖子,任何帖子都可以发送给许多用户您需要在用户

假设:

  • 您试图发送一封群发邮件,但出现了问题,只有一些用户收到了邮件
  • 您最近发送了一封群发邮件,但现在新用户已经注册,他们也需要接收邮件
  • 如何过滤那些已经收到新闻的人(通过雄辩的查询或数据库中的select命令)

    实际上,我在一个基于Laravel4的项目中遇到了这个问题,我正在pivot表上使用LaravelElount搜索一个查询,并跟踪发送给用户的电子邮件

    在我的例子中,有两个模型:Post和User


    这是一种多对多关系:任何用户都可以收到许多帖子,任何帖子都可以发送给许多用户

    您需要在
    用户
    表中添加一列,例如
    日期时间
    字段,名为
    邮寄地址
    。然后,在您的电子邮件或注册方法中(无论您在哪里发送第一封电子邮件),使用发送给用户的
    datetime
    更新用户

    从那时起,您可以根据上的邮件查询任何仍需要电子邮件的用户


    要检查多个需要时事通讯的用户,假设您的用户表模式如下(保持简单):

    我们在这里通过基于mailed_at列的查询来检查用户是否收到了电子邮件。要获取所有需要接收邮件的用户,您需要执行以下操作:

    $usersToMail = User::whereNull('mailed_at')->get();
    
    class Post extends Eloquent {
    
        public function recipients() 
        {
            return $this->belongsToMany('User', 'posts_users', 'post_id', 'user_id');
        }
    }
    
    class User extends Eloquent {
    
        public function mails() 
        {
            return $this->belongsToMany('Post', 'posts_users', 'user_id', 'post_id');
        }
    }
    

    有两种模式:PostUser

    这是一种多对多关系:任何用户都可以收到许多帖子,任何帖子都可以发送给许多用户

    我按照以下方式实施:

    $usersToMail = User::whereNull('mailed_at')->get();
    
    class Post extends Eloquent {
    
        public function recipients() 
        {
            return $this->belongsToMany('User', 'posts_users', 'post_id', 'user_id');
        }
    }
    
    class User extends Eloquent {
    
        public function mails() 
        {
            return $this->belongsToMany('Post', 'posts_users', 'user_id', 'post_id');
        }
    }
    
    因此,当我想向用户发送帖子时,我使用

    $usersToMail = User::whereNotExists(function($query) use ($post_id)
                   {
                        $query->select(DB::raw(1))
                              ->from('posts_users')
                              ->whereRaw('posts_users.user_id = users.id')
                              ->whereRaw('posts_users.post_id = '.$post_id);
                   })->get();
    
    foreach ($usersToMail as $user)
    {
        // send email
        $user->mails()->save($post); // it records that this post has been sent to the user
    }
    

    将最近的电子邮件地址列表放入一个表中,并在发送电子邮件之前检查它们是否在该表中?电子邮件在用户表中,我想将电子邮件发送给所有人,然后下次当我想发送相同的电子邮件时,只有新用户可以接收它。多对多关系,(每个用户都可以收到许多电子邮件,任何电子邮件都可以发送给许多用户)也许我把我的问题提得很糟糕,因为我认为这一定是一项常见的任务。假设这是一份时事通讯,我想把消息发送给任何没有收到的人。您的解决方案只适用于一封电子邮件,而不适用于多封电子邮件(新闻),它只是告诉我们一些用户没有收到新闻,但哪条新闻?在某种程度上,您必须根据特定的新闻检查用户,实际上我将新闻保存在一个Post表中,并且我在用户和Post之间使用一个透视表来检查哪个用户收到了哪些邮件。好的,您确实需要明确说明您在问什么。对于任何回答你的人,你需要提供所有的信息,否则你就不会得到你想要的回答。我建议以后把你的问题说得更具体一些,因为我已经回答了你提出的问题。对不起,我认为你是对的,我复习了我的问题并改进了它,实际上我的英语不好,我复制粘贴了一些部分,现在请检查问题是否说明了我的意思。请回复你的反对票。这只是一个误会