gpt4 book ai didi

php - Eloquent 查询不重复关联上的数据

转载 作者:行者123 更新时间:2023-11-29 22:50:44 25 4
gpt4 key购买 nike

我有一个内部致谢系统,员工可以“感谢”同事。

表“thank”有两个“user”关系,一个是 userFrom 关联的“user_from_id”字段上的一对一关系,另一个是数据透视表上的多对多关系,称为“thank_user”,用于userTo 关联。

我需要查询所有N个“谢谢”,其中UserFrom不在userTo关系上,在结果集上独占。换句话说,用户不能在结果中重复,不能在 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;

谢谢!

最佳答案

在一张 table 上重组整个感谢内容。因为感谢已经是一个关键数据。它通过一个在您的情况下感谢的操作将一个用户与另一个用户绑定(bind)。

另外,你能更清楚你想要得到的SQL结果吗?解释为现实世界的结果,例如“我想知道有多少人只感谢了一个人”。而不是像“我想获取 from_id 计数为 1 的所有行。”

------------------------
| Table: thanks |
------------------------
| id | from_id | to_id |
------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 6 | 2 | 1 |
| 7 | 2 | 2 |
------------------------

用户给予的所有感谢(将 * 替换为 COUNT(id) 以计算感谢次数):

SELECT * FROM thanks WHERE from_id = {id}

用户接受的所有感谢(将 * 替换为 COUNT(id) 以获取感谢计数):

SELECT * FROM thanks WHERE to_id = {id}

用户是否感谢其他用户:

SELECT * FROM thanks WHERE from_id = {from_id} AND to_id = {to_id}

关于php - Eloquent 查询不重复关联上的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28916441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com