具有条件的复杂SQL查询

时间:2014-02-25 09:46:51

标签: mysql sql database

我有以下表结构,我正在研究其他人的代码,不幸的是仍然掌握这一切。下表是客户和订单的订单(或购买)。 '产品'表(为了更加清晰,我省略了一些列,因为它们对解释问题并不重要)。我添加了我需要编辑的现有查询:

#products table * - primary key
shop_products(product_id, organisation_id, product_name, product_type_id, Guid*, active, quantity, multi_buy...)

#purchases table * - primary key
shop_purchases(purchase_id*, user_id, price, Guid, refunded)

SELECT * FROM `shop_products` `t`
  WHERE `t`.`organisation_id`=25679
    AND (IF( availability=3,
        ( SELECT COUNT(*)
         FROM shop_product_years
         WHERE shop_product_years.Guid = t.Guid
           AND shop_product_years.year_id = 10) > 0, (availability=1
                                                      OR availability = 2))                                                          
    AND (multi_buy = 1
        OR (multi_buy = 0
            AND
              ( SELECT COUNT(*)
               FROM shop_purchases
               WHERE shop_purchases.user_id = 5702079181
                 AND shop_purchases.GUID = t.Guid
                        AND shop_purchases.refunded = 1) = 0
            AND
              ( SELECT COUNT(*)
               FROM shop_purchases_queue
               WHERE shop_purchases_queue.user_id = 5702079181
                 AND shop_purchases_queue.GUID = t.Guid) = 0)       
              )
   AND active=1
   AND product_type_id=11)

我基本上想要修改查询,因此如果产品是MULTI BUY(例如multi_buy = 1)且QUANTITY大于0,则计算该项目的现有购买数量(使用Guid)。如果该用户的该项目的购买数量少于QUANTITY,那么我们可以获取产品并在返回的行中显示该行,OTHERWISE因为数量不比计数少,那么我们无法在行中显示该产品。

这个想法是一个产品只能订购一定次数(但只有当数量大于0时)一旦为该用户订购的次数和项目已达到设定数量,用户就不会更能订购这个。

我希望这是有道理的 - 如果您希望我进一步澄清,请告诉我。

0 个答案:

没有答案