Linux, Base de données Postgresql, développement, Internet, emailing et déliverabilité.

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - optimisation

Fil des billets - Fil des commentaires

lundi, 23 novembre 2009

Emailing: Supprimer les inactifs !


Comme je l'ai indiqué dans mon précédent billet, l'activité des utilisateurs devient un point clé des règles de gestion des principaux webmails. Bientôt, les expéditeurs dont les messages seront ouverts et cliqués, auront une meilleure diffusion dans les boîtes de réception que ceux dont les messages sont supprimés sans ouverture, signalés comme spam, ou laissés à l'abandon dans la boîte de réception. D'un autre côté, avoir une grande partie des abonnés inactifs ou ne répondant pas, peut nuire à la réputation de l'expéditeur, ce que de nombreux FAI considèrent aujourd'hui, lorsqu'il s'agit de décider s'il y a lieu de délivrer vos messages, les supprimer ou les placer directement vers le dossier des indésirables. Vous savez déjà, probablement, que les plaintes pour spam et les hard bounces endommagent votre réputation d'expéditeur et réduisent la déliverabilité. Écrire de façon répétée à des inactifs ou des adresses email abandonnées constitue une menace plus insidieuse.

Lire la suite...

lundi, 17 décembre 2007

Toute la puissance de DISTINCT ON avec PostgreSQL

Qui n'a pas eu le besoin un jour de ressortir un listing contenant le détail de toutes les dernières commandes de ses clients ?

Jusque là ... il fallait souvent passer par des sous SELECT, un MAX et une vitesse de calcul pas souvent au rendez-vous ...
Du genre :

SELECT c.id, c.nom, f.id, f.date, f.total 
  FROM (clients c INNER JOIN factures f ON c.id = f.id)
       INNER JOIN
       (SELECT MAX(date) AS date_derniere_facture, id 
          FROM factures 
         GROUP BY id) AS mf ON mf.date_derniere_facture = f.date AND mf.id = c.id

Si vous êtes un utilisateur de PostgreSQL, vous pouvez vous simplifier la vie en utilisant la fonction DISTINCT ON, de la façon suivante :

SELECT DISTINCT ON (c.id) c.id, c.nom, f.id, f.date, f.total
  FROM clients c LEFT JOIN factures f ON c.id = f.id
 ORDER BY c.id, f.date DESC, f.id DESC;

Et le tour est joué, dans un temps record.