Mysql:将产品限制运送选项添加到购物车

时间:2011-11-16 00:26:46

标签: mysql

我有一个定制商店,我需要重做运费。但是,有时候这种情况有时候会发生,与此同时,我需要在购物车只包含一定范围的产品时添加运费选项。

所以有一个ship_method表

id menuname      name      zone maxweight
1  UK Standard   ukfirst   1    2000
2  UK Economy    uksecond  1    750
3  Worldwide Air world_air 4    2000

为此,我添加了另一列prod_restrict,对于现有的列为0,对于受限制的列为1,以及一个名为ship_prod_restrict的新表,其中包含两列,ship_method_id和item_id,列出了运输类别中允许的产品。 所以我需要做的就是查看我的交易,并且对于每个购物车,只需检查哪些运输方式是prod_restrict为0或者有1并且购物车中没有产品不在限制表中。

不幸的是,似乎因为你不能从外部查询到内部查询的值,我无法找到一种巧妙的方法。 (编辑以显示由于以下评论的完整查询)

 select ship_method.* from ship_method, ship_prod_restrict where
 ship_method.`zone` = 1 and prod_restrict='0' or
 (
   prod_restrict='1' 
   and ship_method.id = ship_prod_restrict.ship_method_id
   and (
      select count(*) from (
      select transactions.item from transactions 
      LEFT JOIN ship_prod_restrict
      on ship_prod_restrict.item_id = transactions.item 
      and ship_prod_restrict.ship_method_id=XXXXX
      where transactions.session='shoppingcartsessionid'
      and item_id is null
   ) as non_permitted_items < 1 )
 group by ship_method.id

为您提供该部分是否匹配的列表,并作为内部查询,但我无法在那里获得该ship_method_id(在XXXXX)。

有没有一种简单的方法可以做到这一点,或者我是否采取了错误的方式?我目前无法更改主要发货表,因为现在已经存在,但其他位可能会发生变化。我也可以在PHP中做,但你知道,这似乎是作弊!

1 个答案:

答案 0 :(得分:1)

不确定计数是如何重要的,但这可能会更轻一点 - 没有完整的表模式转储很难说:

SELECT COUNT(t.item) FROM transactions t
INNER JOIN ship_prod_restrict r
ON r.item_id = t.item
WHERE t.session = 'foo'
AND r.ship_method_id IN (**restricted, id's, here**)