Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Cotygodniowa wysyłka ofert
zelu
post
Post #1





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

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


Witam,

mam problem natury algorytmicznej. Piszę aktualnie skrypt, w którym użytkownicy się zapisać do poszczególnych kanałów, a w tych z kolei pojawiają się co jakiś czas systemowe wiadomości. Wiadomości wyświetlają się w sidebarze, ale przy dopisaniu się do kanału można wybrać również opcję wysyłania wiadomości mailem. Dostępne są możliwości wysyłki natychmiastowej, raportu raz w tygodniu, albo brak e-maili. Nie ma problemu z wysyłką natychmiastową i brakiem e-maili. Zaciąłem się jednak przy wysyłce maili raz na tydzień.
Jak wiadomo różni użytkownicy mogą się zapisać do różnych kanałów, a więc każdy dostanie inne wiadomości w swoim mailu. Moje pytanie więc, jak pobrać te dane z bazy? Schemat jest następujący:

user:
- id
- email

channel
- id
- name

message:
- id
- title
- content
- channel_id

channel_user:
- id
- channel_id
- user_id

Można oczywiście pobrać najpierw użytkowników, a później dla każdego usera w pętli for pobrać odpowiednie wiadomości. Nie chciałbym jednak robić tego w ten sposób. Macie może jakieś inne pomysły?


Pozdrawiam
Marcin
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ale przecież jakoś musisz połączyć te wszystkie informacje... W jednym z serwisów podczas zapisu do newslettera daję możliwość wyboru kategorii jakie usera interesują. Podczas wysyłki rozwiązuję to tak, że robię odpowiednie joiny tabel między userem, kategorią i informacjami parsując ja do postaci tablicy o strukturze mniej więcej takiej:
array( user1 => array( email, informacje => array( kategoria1 => array(wiadomosc1, wiadomosc2, wiadomosc3), kategoria2 => array(wiadomosc1, wiadomosc2) ) ), user2 => array( email, informacje => array( kategoria1 => array(wiadomosc1), kategoria2 => array(wiadomosc1) ) ) )
Dodatkowo user ma pole typu datowego w bazie. Czemu? Ponieważ porcjuję wyniki dla skryptu. Na serwerach są limity maili i czasu działania. Według nich obliczam "wielkość paczki", czyli ilości userów mniej więcej do obrobienia i co kilka minut uruchamiam ów skrypt. Może być cron, ale ja stworzyłem odpowiednio napisany skrypt, który uruchamia ze sleepem swoje procesy potomne. Użytkownikom, którym udało się posłać maila ustawiam datę wysyłki na aktualną. Daję też możliwość 2-3 nieudanych prób. Po nich też ustawiam datę na aktualną, ale dodaję do loga, że temu userowi nie dostarczono przesyłki. W takim układzie jedynym moim problemem jest odpowiednie zapytanie, które pobierze dane i część skryptu obrabiająca je do podanej struktury. Mając ją mam bardzo łatwą do obróbki porcję danych tablicowych. Mógłbym z tego także XML utworzyć, który bym userowi jako prywatny RSS udostępnił. Bo i struktura tych danych pozwala mi na to.
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 - 12:30