par
pragmafabrik » 04 mars 2015, 12:04
Bonjour, le problème n'est pas trivial car, si j'ai bien compris, il s'agit de retourner une liste d'identifiants qui ne sont pas forcément présents dans la table temp et le cas échéant, n'ont pas d'enregistrements avec une date au cours de la semaine passée.
Pour éviter de faire une requête par identifiant (long) il faut faire une requête pour tous les identifiants qu'on veut vérifier, donc déjà les matérialiser en SQL. Ensuite, il faut vérifier qu'il n'existe pas d'id correspondant dans la table temp aux conditions voulues:
Code : Tout sélectionner
with
mail_id as (select unnest(array[$tableau_id]) as id)
select
id
from
mail_id
where
not exists (select true from temp where temp.campaign_id = $campaign_id and mail_id.id = temp.id and date_s < now() - '1 week'::interval)
Et cela se passera beaucoup mieux avec un index sur (campaign_id, id).
Amicalement,
Grégoire
Bonjour, le problème n'est pas trivial car, si j'ai bien compris, il s'agit de retourner une liste d'identifiants qui ne sont pas forcément présents dans la table temp et le cas échéant, n'ont pas d'enregistrements avec une date au cours de la semaine passée.
Pour éviter de faire une requête par identifiant (long) il faut faire une requête pour tous les identifiants qu'on veut vérifier, donc déjà les matérialiser en SQL. Ensuite, il faut vérifier qu'il n'existe pas d'id correspondant dans la table temp aux conditions voulues:
[code]
with
mail_id as (select unnest(array[$tableau_id]) as id)
select
id
from
mail_id
where
not exists (select true from temp where temp.campaign_id = $campaign_id and mail_id.id = temp.id and date_s < now() - '1 week'::interval)
[/code]
Et cela se passera beaucoup mieux avec un index sur (campaign_id, id).
Amicalement,
Grégoire