![]() |
![]() |
![]()
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 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 |
|
|
![]() |
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 12:30 |