Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mysql, pobieranie danych z 3 tabel na raz xD
dekros
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.07.2015

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


Witam mam 3 tabele
USERS, pola name,uid(moje unikalne id)
PERM, value
PREMIUM, uid
(wypisałem tylko pola które mnie interesują)
i chce zrobić zapytanie typu select który pobierze mi wszystko userów z bazy USER których name nie ma w bazie PERM pod polem value oraz tych których uid nie znajduje sie w bazie PREMIUM.
próbowałem
SELECT * FROM users JOIN perm ON users.name != perm.value;
i niestety było tak że jeden user był pokazany tyle razy ile jest rekordów w tabeli perm;/
taki przykład
USERS
name = dekros uid=1231231123
name = test uid = 939293902
name = testowy uid = uid = 3213598003
PERM
value = dekros
PREMIUM
uid = 3213598003
i zapytanie powinno pokazać mi tylko gracza test bo znajduje sie tylko w tabeli USERS, gracza dekros nie bo jest w PERM a test tez nie bo jest w PREMIUM

Ten post edytował dekros 6.09.2016, 16:34:20
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


2x LEFT JOIN (pomiędzy USERS i PERM oraz USERS i PREMIUM)
w WHERE 2x IS NULL (na odpowiednie pola w PERM i PREMIUM).


--------------------
Go to the top of the page
+Quote Post
dekros
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.07.2015

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


Cytat(trueblue @ 6.09.2016, 17:40:56 ) *
2x LEFT JOIN (pomiędzy USERS i PERM oraz USERS i PREMIUM)
w WHERE 2x IS NULL (na odpowiednie pola w PERM i PREMIUM).


hmm a ten WHERE to zamiast ON mam dać? coś ala
SELECT * FROM users LEFT JOIN perm WHERE users.name = perm.value IS NULL;
? nie amm ajk sprawdzić bo na telefonie jestem teraz;/
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


WHERE masz dać w WHERE.


--------------------
Go to the top of the page
+Quote Post
javafxdev
post
Post #5





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 27.10.2015

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


Nie rób LEFT JOINa bo będziesz cierpiał jak będzie więcej danych, czemu tak jest?
Ponieważ optymizer SQL musi zrobić całego JOINA, a dopiero potem przefiltrować wyniki.
"That's why the LEFT JOIN / IS NULL query takes 2-3 times as much as the NOT EXISTS / NOT IN query."

Poszukaj opracowań w internecie czemu tak jest, jak jesteś ciekawy.
Go to the top of the page
+Quote Post
dekros
post
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.07.2015

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


SELECT * FROM `user` LEFT JOIN perm ON perm.value != user.nick LEFT JOIN premium ON premium.uuid != user.uuid


zrobiłem takie coś niby udało się zapytanie ale i tak nie pokazuje mi rekordów jakbym chciał, tzn pokazuje tak jak z tabeli premium dane osób które tam sam niby są a ich nie ma

@javafxdev a co używac zamiast tego?
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(javafxdev @ 6.09.2016, 21:54:21 ) *
Nie rób LEFT JOINa bo będziesz cierpiał jak będzie więcej danych, czemu tak jest?
Ponieważ optymizer SQL musi zrobić całego JOINA, a dopiero potem przefiltrować wyniki.
"That's why the LEFT JOIN / IS NULL query takes 2-3 times as much as the NOT EXISTS / NOT IN query."

Poszukaj opracowań w internecie czemu tak jest, jak jesteś ciekawy.

To o czym piszesz tyczy się MSSQL Server. W przypadku MySQL użycie LEFT JOIN jest optymalizowane do NOT IN. A NOT EXISTS delikatnie wolniejsze.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 10:58