2011-07-12 5 views
1

データベースからいくつかのクーポンを引き出します。各クーポンにはクーポンが所属するマーチャントのIDを含むmerchantid列があります。MYSQL制限特定の列の値が発生する条件が発生します。

私は5つのクーポンを取得するクエリを作成しようとしていますが、私は1つのクーポンをマーチャントごとに1つだけ必要としています。私は同じmerchantidで複数のクーポンを望んでいません。

私はそこにも入る必要があるいくつかの条件があります。これは私がこれまでのところ、その商人につき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

私は何が必要クーポンテーブルからクエリを事前にだと思います、マーチャントによってグループ化された後、再び参加します。

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()."