php - MySQL 高效 SELECT 查询

标签 php mysql

我不是数据库专业人士,但目前正在处理一个查询(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/

相关文章:

php - 嵌套列表中的 jQuery 奇偶数

php - 用户限制 - 在数据库中还是直接到文件中? (灵活性与性能?)

mysql - 是否可以在 mysql 或 mongodb 中针对特定字段按顺序保存数据?

mysql - 冗余 MySQL 索引?

php - 在 PDO 语句中转义列名

mysql - Rails 左连接并包含不存在的左表记录

php - 需要帮助在 WordPress 中将 MySQL 转换为 MySQLI

php - 重定向到标题而不在php中打印js警报

php - Laravel 查询生成器加入 LIKE

php - 使用 laravel 5.5 播种 faker 命令