PostgreSQL отличается от группы, имея в одном?

У меня возникли проблемы с запросом 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 ответ

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

Другие вопросы по тегам