![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Co masz na myśli pisząc "ładowania"?
A odnośnie tematu, to jeśli maile są personalizowane to nie pozostaje Ci nic innego jak wysyłać pojedynczo. Jeśli natomiast każdy otrzymuje identycznego maila to możesz je wysyłać w paczkach, powiedzmy po 100 (100 adresów w polu bcc). I taka paczka co jakiś czas. pół minuty czy ileśtam sekund. A odnośnie obciążenia bo chyba o to Ci chodzi to 150tys rekordów dla bazy to śmieszne pierdnięcie. Jakbyś ich miał klika(naście) milionów to można sie zastanawiać, ale przy tej ilości to pikuś. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 7.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Przez załadowanie mówię tu o skopiowaniu odpowiednich adresów do przykładowej tabeli mailing_send (takiej jak w temacie.
Czy 150tys rekordów to piardniecie? Niesądzę, żeby PHP poradziło sobie z czyms takim lekko:
|
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Niesądzę, żeby PHP poradziło sobie z czyms takim (...) No staaaary, ale takie rzeczy to sie robi jednym zapytaniem.INSERT ... SELECT Syntax |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 7.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wiem o tym. Tak planowałem postąpić. Jednak...
Przykładowo, masz dwie tabele: test1: id, grupa, mail test2: id, mail Wykonanie zapytania:
Spowoduje to wstawienie w `test2`.`mail` wartosci z `test1`.`grupa`... A nie o to chodzi... Chyba ze masz na to jakies rozwiazanie, bo moze cos w tym zapytaniu robię zle poprostu? |
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Spowoduje to wstawienie w `test2`.`mail` wartosci z `test1`.`grupa`... A nie o to chodzi... Chyba ze masz na to jakies rozwiazanie, bo moze cos w tym zapytaniu robię zle poprostu? Dam linka jeszcze raz: INSERT ... SELECT Syntax. Przeanalizuj dokładniej wszystkie możliwości składni INSERT ... SELECT ![]() |
|
|
![]()
Post
#7
|
|
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:
Jednak gdy robię takie zapytanie:
To zwraca błąd - kolumna nieistnieje... Zas gdy dam tak:
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. |
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Owszem zapytanie SELECT będzie miało wiele warunków ale koniec końców niezależnie od warunków zapytania powinieneś wyciągać dwie informacje - id i mail. Bo tylko to wstawiasz. Bo co Ci wyciągać grupę?
Jeśli wyciągniesz tylko id i mail to ilość pól w zbiorze wyników SELECT i w tabeli test2 będzie taka sama:
Ten post edytował mike 7.06.2008, 23:07:06 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.06.2025 - 00:54 |