2011-06-15 25 views
1

我感到有一些麻煩,有PostgreSQL的查詢PostgreSQL截然不同,組合在一起?

我要的是「活動」,由距離排序的名單,並從一個位置的最小距離內[in_lat,in_lng,in_radius現在 ,我正在檢索距離(與distance_in_km(...))兩次。一次用於訂購,一次用於檢查廣告系列是否在我的首選半徑內。

而且,這有可能是一個活動有多個「Campaignreceiver」項(接收類型[電子郵件,網站等..])

我要檢索的活動只有一次。因此DISTINCT ON。

所以問題是,我怎麼能得到像「在哪裏距離< in_radius」工作。 我的猜測是添加一個GROUP BY和HAVING,但我做了一些測試,沒有得到是工作。

任何幫助非常感謝!

SELECT DISTINCT ON (c.campaign_uuid, distance) 
      c.campaign_uuid, 
      prl.lat, 
      prl.long, 
      distance_in_km(prl.lat, prl.long, in_lat, in_lng) AS distance     
     FROM 
      usercampaignrelations AS ucr 
     LEFT JOIN 
      campaignreceivers AS cr 
     ON 
      ucr.usercampaign_uuid = cr.usercampaign_uuid 
     LEFT JOIN 
      campaigntargetgrouprelations AS ctg 
     ON 
      cr.campaigntargetgroup_uuid = ctg.campaigntargetgroup_uuid 
     LEFT JOIN 
      campaigns AS c 
     ON 
      ucr.campaign_uuid = c.campaign_uuid 
     LEFT JOIN 
      companycampaignrelations AS cc 
     ON 
      c.campaign_uuid = cc.campaign_uuid 
     LEFT JOIN 
      pointradiuslocations AS prl 
     ON 
      c.location_uuid = prl.location_uuid 
     WHERE 
      ucr.user_uuid = in_user_uuid 
     AND 
      (cr.status = 'SENT' OR cr.status = 'RETRIEVED') 
     AND 
      distance_in_km(prl.lat, prl.long, in_latitude, in_longtitude) < in_radius 
     ORDER BY 
      distance 
     LIMIT 
      in_limit 

回答

1

據我所知,distance_in_km()將被調用一次(每行),只要你使用相同的參數,從而WHERE和ORDER BY不會再評估它使用它。