PostgreSQL отличается от группы, имея в одном? - PullRequest
1 голос
/ 15 июня 2011

У меня возникли проблемы с запросом PostgreSQL

То, что я хочу, это список "Кампаний", упорядоченных по расстоянию и в пределах минимального расстояния от местоположения [in_lat, in_lng, in_radius] Теперь я получаю расстояние (с distance_in_km (...)) дважды. Один раз для заказа, один раз для проверки, находится ли кампания в пределах моего предпочтительного радиуса.

Также возможно, что в кампании есть несколько записей "Campaignreceiver" (receivetype [EMAIL, WEBSITE и т. Д. ...])

И я хочу получить кампанию только один раз. следовательно ОТЛИЧАЕТСЯ НА

Таким образом, вопрос в том, как я могу заставить когда-нибудь, например, "ГДЕ расстояние

ЛЮБАЯ ПОМОЩЬ ОЧЕНЬ ЦЕНА !!!

    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 Ответ

1 голос
/ 18 июня 2011

AFAIK, distance_in_km () будет вызываться только один раз (на строку), если вы используете его с теми же аргументами, поэтому WHERE и ORDER BY больше не будут его оценивать.

...