0

我有一张用户过去购买过的产品的表格。例如

item_id - user_id - title - supplier_id - - supplier_name - date added

用户表

user_id - name

我还有一张供应商表,例如

supplier_id - supplier_name

供应商不时提交特别优惠,然后我想将其传递给我的用户......这可能是在一个项目上或全面。

我的问题是如何最好地管理这个

是否有这样一种情况,当用户登录系统时,我会查看所有报价,然后再次将它们与过去购买的物品或整个供应商进行匹配(如果全面报价)

我认为这可能需要大量资源,比如 100000 个用户和 1000 个要约来查看有很多查询......或者有另一种方法可以做到这一点吗?也许是一个更容易交叉引用的临时表。

我必须立即写下来,并希望确保我尽可能高效地完成它,但这是我的一个新问题,因此是个问题。

这是一个有简单解决方案的标准问题吗?

谢谢你的帮助。

4

3 回答 3

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 子句非常有选择性。

于 2012-10-08T19:07:32.843 回答
0

我将创建一个名为“special_offers”(或任何您想要的)的新单独表,并使其与供应商和用户建立多对多关系。

于 2012-10-08T17:08:53.913 回答
0

您只会查询特定用户的记录,所以这没什么大不了的。您将从过去的订单中查询所有不同的 item_id,以及不同的供应商 ID。这应该返回一个可管理的数字,然后您将这些 id 加入您的报价表以显示相关报价。您可以创建一个包含所有报价(项目特定和供应商特定)的表格,或将它们分成 2 个表格。

于 2012-10-08T17:09:05.607 回答