![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 9.04.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam w bazie dwie tabele, m/in z polami jak poniżej: tabela users: id... user_id..........email tabela image id... user_id.......user_image Jak widać w obu jest pole user_id. Nie wszyscy użytkownicy, którzy mają email mają też user_image w tabeli image. Rekord do tabeli image jest dodawany przy dodawaniu obrazku i zawiera tylko pełne pola, tzn. nie ma np. user_image o wartości NULL. Za to user_id powtarza się w tej tabeli wielokrotnie, gdy użytkownik ma wiele obrazków. Pole user_image zawiera nazwę rodzaju obrazka (jest kilka) Chcę wysłać mailing tylko do tych użytkowników posiadających email w tabeli users (nie wszyscy mają), którzy mają określony typ obrazka w tabeli images w polu user_image. Jak napisać takie zapytanie w php? (tabele są bardziej rozbudowane, ale podaję tylko to co istotne) Z góry dziękuję za pomoc Chodzi tylko o zapytanie do bazy Ten post edytował maraska 9.04.2013, 19:25:38 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 9 Dołączył: 7.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Np. tak:
SELECT `users.user_id` FROM `users`,`image` WHERE `image.user_image` = $klucz_wyszukiwania AND `image.user_id`=`users.user_id` AND `users.email` != NULL |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 9.04.2013 Ostrzeżenie: (0%) ![]() ![]() |
Np. tak: SELECT `users.user_id` FROM `users`,`image` WHERE `image.user_image` = $klucz_wyszukiwania AND `image.user_id`=`users.user_id` AND `users.email` != NULL Dzięki Zbycho za super szybką pomoc. Tylko, że ja chcę wyciągać e-mail usera, który ma user_image o nazwie "nazw%" Czyli może tak jak poniżej? SELECT `users.email` FROM `users`WHERE `image.user_image` LIKE "nazwa%" AND `image.user_id`=`users.user_id` AND `users.email` != NULL Dobrze to będzie? Koledzy, to które zapytanie będzie lepsze z JOIN czy bez? I jeszcze rozszerzę temat. Gdyby chcieć pobierać więcej wartości niż email, to powinno to wyglądać tak, jak poniżej?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 9 Dołączył: 7.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli chodzi o twoją propozycję to odpowiedź brzmi: nie - nie będzie dobrze;
Natomiast jeśli chodzi o JOIN to nie wiem, ale chętnie się dowiem. p.s. W zapytaniu korzystasz z dwóch tabel a za FROM masz referencje do zaledwie jednej. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Oba zapytania zadziałają niemal identycznie, z tym że do wyszukiwania pustych/niepustych (NULL/NOT NULL) wartości nie powinno się używać operatorów arytmetycznych. Zostało to dokładnie opisane w dokumentacji.
Pierwsze zapytanie to również zapytanie ze złączeniem, ale w tym przypadku INNER JOIN. Nas natomiast interesują wszystkie rekordy z tabeli users i odpowiadające im rekordy z tabeli image, stąd LEFT JOIN. Mała podpowiedź do drugiego pytania: `u`.* - wszystkie kolumny z tabeli users `i`.* - wszystkie kolumny z tabeli image `u`.*, `i`.* - wszystkie kolumny z tabel users i image @zbychoCom: Za JOIN-em również znajduje się nazwa tabeli (i ewentualnie jej alias). Ten post edytował mortus 9.04.2013, 20:50:55 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 9.04.2013 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie też nigdy nie używałem JOIN a czytałem, że mniej obciąża.
Nie chciałbym wysłać do użytkownika maila o treści "masz obrazek...." jeżeli obrazka nie ma, więc pytanie, czy tak będzie OK
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 22:45 |