Jag skall skicka ut ett nyhetsbrev som innehåller redan skriva nyheter. Jag använder JMail och dess metod BulkMerge.
På en sida kan besökare anmäla sin e-postadress och kryssa för vilka kategorier de vill ha nyheter om när nyhetsbrevet skickas ut. Exempelvis kanske besökare A är intresserad av fotboll och ishockey medan besökare B bara är intresserad av ishockey samtidigt som besökare C bara är intresserad av bordtennis. Administratören kan sedan komponera nyhetsbrevet genom att välja en nyhet ur en lista och därefter genom att kryssa för checkboxar ange till vilken eller vilka kategorier nyheten hör. Detta upprepar han tills nyhetsbrevet består av alla de nyheter han vill skall skickas ut. Men, varje prenumerant skall i sitt mail bara få de nyheter han är intresserad av. Jag har SQL Server 2000 och följande tabeller:
Problemet är bara det att jag för varje kombination av kategorier måste kolla om det finns prenumeranter som är intresserade av just den kombinationen. De får ju inte vara intresserade av några andra kategorier än kategorierna i just den kombinationen. Detta leder till att jag i värstafall måste kolla 2^antal_kategorier kombinationer.
Hur i hela friden skall jag lösa det här?
Jag har en tanke som går ut på följande:
Ställ en sql-fråga som plockar ut endast de kombinationer av kategorier till vilka det hör prenumeranter. På så sätt slipper jag sedan loopa igenom även de kombinationer som saknar prenumeranter.
För varje kombination som erhölls från sql-frågan, ställ en ny sql-fråga som plockar ut de prenumeranter som intresserad av ENDAST de kategorier som finns i kombinationen. Det här verkar också svårt, jag känner bara till hur man skriver en WHERE-sats som plockar ut poster som ÅTMINSTONE stämmer. Plocka sedan ihop nyheterna och skicka till aktuella prenumeranter. Klart, gå till nästa kombination.
Jag tycker det verkar oerhört komplext och jobbigt. Någon som har jobbat med något liknande innan?
Du nämner inte möjligheten att loopa igenom medlemstabellen och utifrån den skapa ett mail till varje medlem, men det kanske är ännu mer prestandakrävande?
Skulle du förresten kunna förklara tabellerna lite kort? Jag ser inte riktigt vad den mittersta är till för...
Nej, det vill jag undvika eftersom jag då dels inte kan använda BulkMerge och istället måste skicka ett mail för varje prenumerant och dels i loopen då måste ställa en sql-fråga som plockar ut nyheterna. Bara att loopa igenom prenumeranterna och skicka likadana mail brukar ta alldeles för lång tid, om jag sedan dessutom skulle skapa nytt innehåll för varje loop skulle det ta jättelång tid.
Nu är jag inte speciellt insatt i hur nyhetsbrev bör utformas för att göra sina läsare nöjda, men en "nödlösning" skulle kunna vara att helt sonika skicka med en länk till en sida där de utvalda nyheterna visas.
En annan idé kan vara att först skapa alla personliga mail och lägga dem i en temp-tabell för att sedan låta JMail loopa igenom denna tabell, för att slutligen rensa i temp-tabellen. På så sätt skulle själva hästjobbet läggas utanför JMail.
En lösning är kanske att göra så här, ungefär som jepsO skrev:
Skapa en temptabell med fälten strEmail och strText.
För varje prenumerant, plocka ut de kategorier han är intresserad av och skapa texten bestående av de nyheter som hör till hans kategorier. Gör en INSERT INTO temptabell strEmail, strText med den nyss skapade strängen.
I JMail skapar jag ETT mail med variablerna %%strEmail%% och %%strText%% och skickar in hela recordsetet som fås från SELECT * FROM temptabell
269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e