我有一张用户过去购买的产品表。 e.g。
item_id - user_id - title - supplier_id - - supplier_name - date added
用户表
user_id - name
我还有一份供应商表格,例如
supplier_id - supplier_name
供应商不时会提交特别优惠,然后我想将这些优惠传递给我的用户......这可以是一个项目或全面的。
我的问题是如何最好地管理这个
当用户登录系统时,我会查看所有优惠,然后再次匹配他们过去购买的商品或整个供应商(如果全面提供)
我认为这可能会占用大量资源,说100000个用户和1000个提供了很多查询的提议....或者还有其他方式可以做到这一点吗?也许是一个更容易交叉引用的临时表。
我必须立即写下这篇文章,并希望确保尽可能高效地完成这项工作,但这对我来说是一个新的问题。
这是一个标准问题,有一个简单的解决方案吗?
感谢您的帮助。
答案 0 :(得分:1)
我认为用两个不同的表来管理商品是有意义的。
在第一种情况下,您可以使用类似这样的查询来识别这些用户。 (代码未经过测试。)
select distinct user_id
from products -- Seems like "purchases" might be a better name.
where supplier_id = ?
and item_id = ?;
在第二种情况下,使用类似这样的查询。
select distinct user_id
from products
where supplier_id = ?;
GROUP BY子句可能比SELECT DISTINCT提供更好的性能。
在第一种情况下,产品(项目)商品表可能看起来像这样。
supplier_id item_id offer_start offer_end
--
1 10156 2012-08-01 2012-08-15
您可以通过以下方式获得接收这些优惠的用户。
select distinct user_id
from products -- Seems like "purchases" might be a better name.
inner join item_offers on item_offers.supplier_id = products.supplier_id
and item_offers.item_id = products.item_id
and current_date between item_offers.offer_start
and item_offers.offer_end
where supplier_id = ?
and item_id = ?;
如果您要查询单个用户(通常是这种情况),您可以将用户ID添加到WHERE子句中。即使在一个巨大的表上,我也希望WHERE子句具有很强的选择性。
答案 1 :(得分:0)
我会创建一个名为“special_offers”(或任何你想要的)的新单独表格,并与供应商和用户建立多对多的关系。
答案 2 :(得分:0)
您只会查询特定用户的记录,因此这不应该是一个大问题。您可以查询过去订单中的所有不同item_id,以及不同的supplier_ids。这应该返回一个可管理的数字,然后您将这些ID加入您的商品表以显示相关的商品。您可以创建一个包含所有商品(特定商品和供应商特定)的表格,或将它们分成2个表格。