【发布时间】:2015-03-07 15:25:43
【问题描述】:
我有一个内部确认系统,员工可以在其中“感谢”同事。
表“thank”有两个“user”关系,一个在 userFrom 关联的“user_from_id”字段上是一对一的,在一个名为“thank_user”的数据透视表上是多对多的关系。 userTo 关联。
我需要查询所有 N 个 UserFrom 不在 userTo 关系上的“Thanks”,在结果集上独占。换句话说,用户不能在结果中重复,在 userFrom 或 userTo 关联上。
我想出了下面的 SQL,但我发现它是一个肮脏的 hack。如何将其翻译为 Eloquent 查询?
create table tmp as select * from (
select thanks.id, thanks.user_from_id, thank_user.user_id, thanks.created_at from thanks
inner join thank_user on thank_user.thank_id=thanks.id
group by user_from_id)
t
group by user_id;
select * from tmp
where user_from_id not in (select user_id from tmp)
and created_at between '2014-01-01' and '2015-12-31'
order by rand()
limit 10;
谢谢!
【问题讨论】:
-
我认为你过于复杂了。为什么不只是一个
user_from_id和user_to_id都是整数的thank表。您将 from 数据放在单独的表中是否有任何特殊原因? -
是的,usersTo 是 1:N 关系,一个用户可以在同一个“感谢”中感谢多个同事,例如。一个团队。
-
错误:
GROUP BY不指定所有非聚合值可能会导致每列的随机值 - 独立。 -
@zeeto 你的桌子上已经有多个
user_to_id。你也可以复制你的user_from_id,没问题。您的 SQL 将更容易编写。我将在几分钟内将其发布为答案。另外,我没有得到您要查询的内容。你能再解释清楚一点吗?
标签: php mysql sql laravel-4 eloquent