MYSQL限制具有where条件的特定列值的出现

时间:2011-07-12 00:23:22

标签: mysql

从数据库中提取一些优惠券。每张优惠券都有一个商品列,其中包含优惠券所属商家的ID。

我正在尝试构建一个可以提取5张优惠券的查询,但我只需要每个商品1张优惠券。我不想要多个具有相同商品的优惠券。

我也有一些需要进入的WHERE条件。这就是我到目前为止,它每个商家只提供1张优惠券,但是它的优惠券没有最高的点击次数:

SELECT C.couponid,C.fmtc_couponid,C.merchantid,
       C.label,C.restrictions,C.coupon,C.link,
       C‌.image,C.expire,C.unknown,C.clicks,M.name,
       M.approved,M.homepageurl,M.logo_image,M‌.permalink
FROM tblCoupons C,tblMerchants M
WHERE C.merchantid=M.merchantid AND
      C.begin < ".mktime()." AND
      C.expire > ".mktime()." AND
      M.display='1'
GROUP BY C.merchantid ORDER BY C.clicks DESC LIMIT 0,5

1 个答案:

答案 0 :(得分:1)

我认为您需要的是从优惠券表中预先查询,由商家进行分组,然后重新加入。

select 
      PreQuery.merchantID,
      C2.couponid,
      C2.fmtc_couponid,
      C2.merchantid,
      C2.label,
      C2.restrictions,
      C2.coupon,
      C2.link,
      C‌2.image,
      C2.expire,
      C2.unknown,
      C2.clicks,
      M.name,
      M.approved,
      M.homepageurl,
      M.logo_image,
      M‌.permalink
   from 
      ( select c.merchantid,
               max( c.clicks ) as HiClickCoupon
           from
              tblCoupons c
              join tblMerchants M1
                 on PreQuery.MerchantID = M1.MerchantID
                 AND M1.DIsplay = '1'
           where
                  c.begin < ".mktime()."
              and c.expire > ".mktime()."
           group by 
              c.merchantid
           order by 
              max( c.Clicks ) DESC
           limit 
              0, 5 ) PreQuery

      join tblMerchants M
         on PreQuery.MerchantID = M.MerchantID

      join tblCoupons C2
         on PreQuery.MerchantID = C2.MerchantID
         AND PreQuery.HiClickCoupon = C2.Clicks
         AND C2.begin < ".mktime()."
         AND C2.expire > ".mktime()."