Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Newsletter, przechowywanie listy odbiorców, Szybkie przetworzenie 50-150tys rekordów
grzegory
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.06.2008

Ostrzeżenie: (0%)
-----


Witajcie,
Mam taki o to problem. Mianowicie jestem w trakcie pisania newslettera/mailingu. Ma on być dość rozbudowany, wiadomości będą rozsyłane do firm pobieranych z bazy według roznego typu kryteriow (czas obecnosci w bazie, slowo kluczowe, grupa itd), akurat to nie jest najważniejsze.

Do tej pory pisząc mniejsze mailingi robiłem to dość prosto, formularz zawierał checkboxy z adresami i sie zaznaczało do kogo mają być wysłane maile.

Korzystałem przy tym z dwóch tabel:
Tabela: mailing = id | tytul | tresc | (...dodatkowe kolumny typu załączniki)
Tabela: mailing_send = id | id_mailing | email
Nastepnie robiłem:
SELECT `mailing`.*, `mailing_send`.* FROM `mailing`.`id`=`mailing_send`.`id_mailing`
Po pomyślnym wysłaniu rekord był kasowany... Proste i bardzo skuteczne. Zbyt proste.

Sprawdzało się to przy małej ilości adresów do rozesłania. W przypadku newslettera o którym teraz piszę, będzie zachodzić potrzeba wysłania 50-150tys maili. Nie wyobrażam sobie zbytnio ładowania wszystkich wybranych według kryteriów adresów. Chyba, że jest na to jakiś szybki sposob. Zrobiłbym to w pętli while jak przy normalnym pobieraniu kolejnych rekordów z bazy.

Co mi chodzi po głowie.
Co zrobić aby optymalnie przygotować listę adresów email do których mają zostać wysłane wiadomości? Przeznaczenie pod 50-150tys rekordów. Należy zaznaczyć, że w tym samym czasie może być rozsyłanych kilka róznych newsletterów z różną listą odbiorców.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
grzegory
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.06.2008

Ostrzeżenie: (0%)
-----


Albo sie nie rozumiemy, albo zle kombinuje i rozumuje.
Wiem, że chodzi Ci o przykład z komentarzy w manualu:
  1. <?php
  2. INSERT newtable (user,age,os) SELECT table1.user,table1.age,table2.os FROM table1,table2 WHERE table1.user=table2.user;
  3. ?>



Jednak gdy robię takie zapytanie:
  1. <?php
  2. INSERT INTO `test2`(`mail`) SELECT `test1`.`mail`, `test1`.`grupa` FROM `test1` WHERE `grupa`='2'
  3. ?>


To zwraca błąd - kolumna nieistnieje...
Zas gdy dam tak:
  1. <?php
  2. INSERT INTO `test2`(`id`, `mail`) SELECT `test1`.`mail`, `test1`.`grupa` FROM `test1` WHERE `grupa`='2'
  3. ?>

To w `test2`.`mail` umieszcza mi `test1`.`grupa`...

Z tego wynika, że ilość kolumna które są wypełniane, musi być równa ilości kolumn z pobieranego zapytania. Nie o to chodzi. Zapytanie SELECT będzie miało wiele warunków, pewnie będą połączenia, dziwne rzeczy.. może być ich nawet kilkanaście. Zaś w tabeli `test2` zawsze bedzie mialo dwie kolumny id, mail. Czyli -według moich testów - niezadziała.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 08:21