我不是数据库专业人士,但目前正在处理一个查询(PHP->MySQL):
我有 3 张 table :
“项目”:ID、名称、链接
“ItemsToUsers”:id、item_id、user_id
“用户”:ID、电子邮件
每个“元素”可用性都会提交给定期更改,我会通过某种算法实时检查这些更改。
我的目标是
1) 选择所有项目并即时检查它们是否可用
2) 如果项目可用,请通过电子邮件通知正在监控该项目的用户。为此,我需要从“ItemsToUsers”中选择用户,然后从“用户”表中获取他们的电子邮件。
我知道如何以简单的方式做到这一点,但我觉得我会遇到很多查询。 (每个用户的单独选择...)
有没有一种方法可以更有效地做到这一点:在一个查询中或通过更改算法? 感谢您的宝贵时间!
最佳答案
没有足够的信息来确定商品的可用性。这严重阻碍了查询第 2 项的能力。
也就是说,假设我们向 Items 表中添加一个“可用”列,该列的 tinyint 为 0 表示不可用,1 表示可用。
那么,获取观看可用项目的人的所有电子邮件地址的查询是:
SELECT u.email FROM Users AS u JOIN ItemsToUsers AS k ON k.user_id = u.id JOIN Items AS i on i.id = k.item_id WHERE i.available = 1;
或者,您可以使用子查询和 IN。
假设您有一个名为 Availability 的不同表,其中包含 id、item_id 和 available 列,该表也是一个 tinyint,其中 1 表示可用,0 表示不可用。
SELECT u.email FROM Users AS u JOIN ItemsToUsers AS k ON k.user_id = u.id WHERE k.item_id IN (SELECT a.item_id FROM Availability AS a WHERE a.available = 1);
同样,如果不知道如何获取可用产品列表,就不可能优化检索电子邮件地址列表的查询。
关于php - MySQL 高效 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28863756/