gpt4 book ai didi

php - mySQL 复杂的 SELECT 查询?

转载 作者:可可西里 更新时间:2023-11-01 07:08:22 25 4
gpt4 key购买 nike

这是我的表结构:

users:

id | email

emails:

id | subject | body

user_emails:

user_id | email_id

这是非常简单的设计。但是,我需要为所有 users.id 选择第一个(最低的)emails.id,这些 id 在 user_emails 中没有关联。

举例说明:

users:

id | email
1 | email@domain.com
2 | test@lol.com
3 | user@test.com

emails:

id | subject | body
1 | sub1 | body1
2 | sub2 | body2

user_emails:

user_id | email_id
1 | 1
1 | 2
2 | 1

如数据所示:

  • 用户 1 已收到电子邮件 1 和 2,因此选择应排除那个用户。
  • 用户 2 只收到电子邮件 1,所以它应该选择用户 2和电子邮件 2。
  • 用户 3 没有收到任何邮件,所以它应该选择用户 3和电子邮件 1。

我将在 PHP 中执行此操作,因此如果仅使用 mySQL 无法完成任何逻辑,则应使用 PHP 编写。

提前致谢

编辑:我应该提一下,将有成千上万的用户 ID 和数百个电子邮件 ID。发送所有这些电子邮件的脚本将每天运行一次。因此,这应该尽可能优化。

最佳答案

可以试试下面的方法:

SELECT * from users u 
LEFT JOIN users_emails e ON u.id=e.user_id
LEFT OUTER JOIN emails m on m.id=1
WHERE e.user_id is NULL

或者如果电子邮件中的 id 不必像上面的查询那样为 1,则使用下面的。

SELECT * from users u 
LEFT JOIN users_emails e ON u.id=e.user_id
LEFT OUTER join emails m on m.id=(SELECT id from emails order by id limit 1)
WHERE e.user_id is NULL

关于php - mySQL 复杂的 SELECT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11130249/

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