![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 17.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem nawet. jak przeszukać forum na tę okoliczność (w sensie fraz) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Mam 2 tebele a aid aemail w wid wemail wwiadomoscid teraz chce znalezc uzytkownikow, ktorych maile sa w tabeli a i nie sa umieszczone w tabeli w. Normalnie dalbym SELECT a.aid FROM a LEFT JOIN w ON w.wemail = a.aemail WHERE w.wwiadomoscid IS NULL Dostaję dobry wynik. ale chcę zawęzić wyniki do osób, które nie mają maila w tabeli w dla danego id wiadomosci wwiadomoscid więc dodaję AND w.wwiadomoscid = '1' i kicha, zawsze dostaje pusty wynik. PS w tabeli w maile mogą się powtarzać. W tabeli a już nie. Ten post edytował Konio 16.06.2008, 16:06:22 |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Skoro robisz LEFT JOIN i bierzesz te rekordy gdzie wwiadomoscid IS NULL to dodanie sprzecznego waruku wwiadomoscid = 1 da ci ZERO rekordow. BO wartosc nie moze byc jednoczesnie NULL i 1
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 17.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam czeski bląd ....
SELECT a.aid FROM a LEFT JOIN w ON w.wemail = a.aemail WHERE w.wid IS NULL Reszta bez zmian. PS jeśli mój tok rozumowania jest zły prosze o nakierowanie lub konkretny przykład na wciągnięcie tych osób, które dla danej wartosci w polu w.wwiadomoscid nie mają swojego maila wpisanego w wemail (w tym wypadku nie dokonały wysyłki maila - takie jest zadanie skryptu) Naturalnie chodzi o rozwiązanie w jednym zapytaniu. Ten post edytował Konio 16.06.2008, 17:06:06 |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 17.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Opiszę to od strony funkcjonalnej.
Mam 2 uzytkowników w tabeli a aid = 1 (id uzytkownika) | aemail = mail_uz1@mail.pl (mail uzytkownika) oraz aid = 2 | aemail = mail_uz2@mail.pl Wyslana zostala do uzytkownika o aid=1 wiadomosc o id wiadomosci = 2 Do tabeli w w tym momencie dodany jest wpis wid (id rekordu wysylki) wemail = mail_uz1@mail.pl wwiadomoscid = 2 Oczywiście użytkowników jest więcej, wpisów o wyslaniu i id wiadomości też. Teraz jednym zapytaniem chcę wydobyć z tabeli a użytkowników do których nie została wysłana wiadomość o id wiadomości = X, czyli w tabeli w nie ma wpisów wemail = (mail uzytkownika, ktorego powinno zwrócić) | wwiadomoscid = X Wpisy w wemail nie są unikalne, czyli może być także tam wid (id rekordu wysylki) wemail = mail_uz1@mail.pl wwiadomoscid = 3 (inne id wiadomosci) Ten post edytował Konio 16.06.2008, 18:13:21 |
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 17.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki, działa.
PS rozumiem, że takie zapytannie przez to, że baza sobie wewnętrznie to bsługuje w dużo mniejszym stopniu obciąża bazę niż podobny mechanizm wykonany jako pętle w php? PS1 nie ma problemu, abym dodal id uzytkownikow do tabeli wyslannych. Na pewno sobie to zoptymalizuje juz. Maile tez bede trzymal niestety, gdyz czasem mam kilka grup uzytkownikow a w nich dublujące się konta z mailami (np. firma, klient - rozszerzanie uprawnień nie wchodzi w grę, musze wiedzieć jako kto się loguje) a wtedy spr po mailu daje mi większą pewność, że mail dotrze tylko raz. Jeszcze raz dzięki wielkie. Czasem dobrze znać niektóre funkcje zapytań (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ułatwiają życie. Ten post edytował Konio 16.06.2008, 20:38:07 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 01:38 |