我想保存客户订阅的电子邮件列表。我可能有:
email_lists:
ID Name
1 Coupons
2 Monthly Newsletter
3 Company News
现在,用户可以根据需要订阅任意数量的列表。所以假设我有三个用户:
用户:
ID Name Lists
1 Bob 1,3
2 Jane 2,3
3 Tom 1
现在我需要进行查询以获取订阅列表#1的所有用户ID:
SELECT ID FROM users WHERE Lists LIKE '%1%'
是否有更好的方法为每个用户存储列表ID,以便更有效地执行查询?
答案 0 :(得分:1)
第三个表格subscrib
将是最好的:
UserId ListId
1 1 // Bob, Coupons
1 3 // Bob, Company news
2 2 // Jane, Monthly Newsletter
2 3 // Jane, Company news
3 1 // Tom, Coupons
然后你的查询就像(Company news
}:
SELECT UserId FROM subscrib WHERE ListId = '3';
或
SELECT s.ListId, u.Email, u.Name FROM subscrib s
LEFT OUTER JOIN users u ON u.ID = s.UserId
WHERE s.ListId = '3';