SQL查询以筛选出已收到电子邮件的用户
假设:SQL查询以筛选出已收到电子邮件的用户,sql,email,select,laravel-4,filter,Sql,Email,Select,Laravel 4,Filter,假设: 您试图发送一封群发邮件,但出现了问题,只有一些用户收到了邮件 您最近发送了一封群发邮件,但现在新用户已经注册,他们也需要接收邮件 如何过滤那些已经收到新闻的人(通过雄辩的查询或数据库中的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');
}
}
有两种模式:Post和User 这是一种多对多关系:任何用户都可以收到许多帖子,任何帖子都可以发送给许多用户 我按照以下方式实施:
$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之间使用一个透视表来检查哪个用户收到了哪些邮件。好的,您确实需要明确说明您在问什么。对于任何回答你的人,你需要提供所有的信息,否则你就不会得到你想要的回答。我建议以后把你的问题说得更具体一些,因为我已经回答了你提出的问题。对不起,我认为你是对的,我复习了我的问题并改进了它,实际上我的英语不好,我复制粘贴了一些部分,现在请检查问题是否说明了我的意思。请回复你的反对票。这只是一个误会