MySQL如何通过用户邮箱参数查询对应的订阅记录
问题解答
结论
当然可以直接使用users表的用户邮箱作为查询参数获取匹配的所有订阅记录,你的表之间存在清晰的关联链:subscription 关联 orders,orders 关联 users,完全可以通过关联链反向用用户邮箱过滤订阅数据。
参考SQL语句
SELECT s.*, o.*, u.* -- 建议替换为实际需要的字段,避免重名问题 FROM subscription s INNER JOIN orders o ON s.order_id = o.id INNER JOIN users u ON u.id = o.user_id WHERE u.email = 'test@mail.com' -- 替换为实际要查询的用户邮箱 ORDER BY s.created_at;
注意:如果需要返回所有匹配的订阅记录,去掉原SQL的
LIMIT 1限制即可。
优化建议
- 避免使用
SELECT *,显式指定需要返回的字段,防止多个表重名字段(比如三个表都有id字段)被覆盖导致数据异常。 - 如果频繁使用邮箱作为查询条件,建议给
users.email字段添加普通索引,同时orders.user_id、subscription.order_id作为关联字段也建议添加索引,大幅提升关联查询效率。 - 注意你测试数据中
users表存储的邮箱是test@mail.com,orders表冗余存储的邮箱是test@email.com,筛选时注意匹配你业务需要的邮箱字段。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

