Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql]polecenie JOIN, wybranie z 2 tabel niepowtarzajacych sie dancyh
radziowi
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 9.10.2006
Skąd: Brzozów

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


Witam!
Mam przykladowe tabele:

tabela1
- id
- imie

tabela2
-id
-zapalcil


W tabeli1 mam wszystkich użytkowników serwisu. W tabeli2 mam tylko id użytkowników co zapłacili. I teraz czy to możliwe odczytać za pomocą samego zapytania tych ludzi co nie maja oppaconego abonamentu a sa w serwisie czyli wszytkich userów znajdujacych sie w tabeli1 z wylaczeniem userow w tabeli2??

Probowałem tak ale to nie idzie:
  1. SELECT DISTINCT tabela1.id, tabela2.id FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id
Wypisuje mi to wszytkich nie odrzuca userow z tabeli2

Może ma ktoś jakiś pomysłquestionmark.gif Chciałbym to zrobić na poziomie MySQL.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
liso
post
Post #2





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Kraków

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


spróbuj tak:
  1. SELECT DISTINCT tabela1.id, tabela2.id FROM tabela1 INNER JOIN tabela2 ON tabela1.id<>tabela2.id
Go to the top of the page
+Quote Post
SongoQ
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Mozesz tak:

  1. SELECT * FROM tabela1 LEFT JOIN tabela2 ON tabela1.id = tabela2.id_tabeli1 WHERE tabela2.id IS NULL


--------------------
Go to the top of the page
+Quote Post
radziowi
post
Post #4





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 9.10.2006
Skąd: Brzozów

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


Wielkie dzięki!!! Śłicznie zadziałało.
  1. SELECT * FROM tabela1 LEFT JOIN tabela2 ON tabela1.id = tabela2.id_tabeli1 WHERE tabela2.id IS NULL

to jest prawidlowe rozwiazanie


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





Grupa: Zarejestrowani
Postów: 380
Pomógł: 2
Dołączył: 5.01.2007

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


a nie prosciej tak?
  1. SELECT * FROM tabela1 WHERE id NOT IN (SELECT id FROM tabela2)


--------------------
Wybierasz się do Zakopanego? Odwiedź Willę Pod Górami. Następnym razem na pewno do niej wrócisz :)
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Z tego, co pamiętam, to zapytania z IN są wolniejsze.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
maryaan
post
Post #7





Grupa: Zarejestrowani
Postów: 380
Pomógł: 2
Dołączył: 5.01.2007

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


bardzo mozliwe, ale nie popadajmy w paranoje. Nie wnikam czy bedzie to rzad wielkosci 0.0x, 0.00x czy jeszcze mniejszy ulamek sekundy sekundy. Serwera to nie zarznie a po co sobie utrudniac zycie, im prostsze zapytanie tym mniejsza mozliwosc zrobienia pomylki. Tabele i tak nie sa optymalnie zaprojektowane wiec wydajnoscia az tak bardzo bym sie nie stresowal

Ten post edytował maryaan 18.02.2007, 02:28:09


--------------------
Wybierasz się do Zakopanego? Odwiedź Willę Pod Górami. Następnym razem na pewno do niej wrócisz :)
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Dobra, przy kilku odwiedzinach, ok.

Ale co w sytuacji, gdy masz powiedzmy tylko te 20 żądań i słabszy serwerek. Sam skrypt wykonuje np. 10 zapytań. Wtedy te setne części sekund musisz przemnażać 10^N, w zależności jaki serwer, ile żądań jednocześnie...

Grosik do grosika, tutaj - sekunda do sekundy i wyjdzie na to, że cały skrypt jest do wyrzucenia/do przepisania, bo działa za wolno.

Kiedyś programiści mieli ograniczone zasoby sprzętowe i pisali wszystko na miarę bardziej ceniąc sobie wydajność, a nie wygodę (i często potrafili te obie rzeczy ze sobą pogodzić).

A teraz co? Zdziwienie, gdy przychodzi mail od administracji proszę zoptymalizować zapytania do bazy.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
maryaan
post
Post #9





Grupa: Zarejestrowani
Postów: 380
Pomógł: 2
Dołączył: 5.01.2007

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


a czym ta administracja administruje? serwerem na 486? jesli takie zapytanie przeciazy im serwer to chcialbym zobaczyc jak dziala tam chociazby phpbb by przemo :]

a mowiac serio to nie caly skrypt do przepisania tylko zapytanie, albo inaczej - pierwsza tabela do przerobienia w ten sposob
- id
- imie
- zaplacil

i wszystko


--------------------
Wybierasz się do Zakopanego? Odwiedź Willę Pod Górami. Następnym razem na pewno do niej wrócisz :)
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No, swego czasu była afera z home.pl... (choć to może zły przykład)

Ale kiedyś czytałem, że podobne sytuacje miały miejsce u innych ISP-ów własnie przy zbyt "żrących" zapytań i nie były to "Przema".


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
SongoQ
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Odnosnie wydajnosci czy IN czy LEFT JOIN wszystko zalezy od zlozonosci i wielkosci rekordow nie ma sensu przekownywac sie co jest lepsze. Jesli wydajnosc jest nieodpowiednia testy i modyfikacje zapytania w celu polepszenia. Jak bedzie 10 rekordow to nawet zapytanie z 10 podzapytaniami moze byc trafnym rozwiazaniem. tongue.gif


--------------------
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: 20.08.2025 - 07:39