Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Jak zbudować zapytanie, pobieranie danych z jednej tabeli tylko jeśli w innej brak danej wartości
jarekhunter
post 10.07.2012, 08:52:36
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 21.01.2010

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


Witam panowie i panie.
Przepraszam jeśli już ktoś o to pytał, szukam i znaleźć nie mogę.

Mam dwie tabele

artykuly
  1. artykul_id int(11) PRIMARY KEY AUTO_INCREMENT,
  2. nazwa varchar(255),
  3. tresc text,
  4. dodano date,
  5. autor int(11),
  6. kategoria_id int(11)


artykuly_temp
  1. art_tmp_id int(11) PRIMARY KEY AUTO_INCREMENT,
  2. artykul_id int(11),
  3. nazwa varchar(255),
  4. tresc text,
  5. dodano date,
  6. autor int(11),
  7. kategoria_id int(11)


Chce pobrać wyniki z tabeli artykuly tylko wtedy gdy żaden rekord w tabeli artykuly_temp nie wskazuje na artykul_id
czyli

np. artykuly
  1. artykul_id =1
  2. nazwa="jakaś_treść"
  3. tresc="przykładowe dane"


artykuly_temp
  1. art_tmp_id=22
  2. artykul_id =1
  3. nazwa="jakaś_treść"
  4. tresc="przykładowe dane"


W tym przypadku chcę by mi nie pobierało tego rekordu.
Mam nadzieje że wyjaśniłem to w miarę zrozumiale.
Napiszcie mi czy można to jakoś osiągnąć..
Dziękuję za pomoc i pozdrawiam serdecznie.
Go to the top of the page
+Quote Post
piotrex41
post 10.07.2012, 08:56:38
Post #2





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

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


Poczytaj trochę o zapytaniach LEFT JOIN, RIGHT JOIN, INNER JOIN. Pozwalają one łączyć w zapytaniu dane z wielu tabel, więc też pobieranie z jednej gdy w drugiej coś jest, lub czegoś nie ma.


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
jarekhunter
post 10.07.2012, 16:47:29
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 21.01.2010

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


Szukam i nie mogę znaleźć przykładu zastosowania w moim przypadku.
Ja nie chce łączyć tabel a jedynie

Pobierać wiersze tylko jeśli żaden wiersz w artykuly_temp nie wskazuje na artykul
Przy użyciu Join wychodzą mi tylko wtedy kiedy wskazuje jedna tabela na drugą, nie wiem jak zastosować to odwrotnie.
Podpowie kolega jak mogło by wyglądać zapytanie questionmark.gif będę serdecznie wdzięczny..
Go to the top of the page
+Quote Post
CuteOne
post 10.07.2012, 16:50:21
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


http://dev.mysql.com/doc/refman/5.0/en/com...function_not-in
Go to the top of the page
+Quote Post
jarekhunter
post 10.07.2012, 17:19:57
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 21.01.2010

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


Skleciłem coś takiego tylko nie wiem czy to będzie optymalne rozwiązanie:
  1. SELECT art.nazwa, art.artykul_id FROM artykuly AS art LEFT JOIN artykuly_temp AS tmp ON (art.artykul_id = tmp.artykul_id) WHERE tmp.artykul_id IS NULL;


Zwraca mi to co potrzebuję tylko nie chcę by to się zbyt długo wykonywało questionmark.gif
Go to the top of the page
+Quote Post
bpskiba
post 10.07.2012, 19:19:53
Post #6





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


Cytat(jarekhunter @ 10.07.2012, 18:19:57 ) *
Skleciłem coś takiego tylko nie wiem czy to będzie optymalne rozwiązanie:
  1. SELECT art.nazwa, art.artykul_id FROM artykuly AS art LEFT JOIN artykuly_temp AS tmp ON (art.artykul_id = tmp.artykul_id) WHERE tmp.artykul_id IS NULL;


Zwraca mi to co potrzebuję tylko nie chcę by to się zbyt długo wykonywało questionmark.gif


Nie wiem wprawdzie po co jest to WHERE, ale zapytanie wykonałeś to prawidłowo. Gratuluję!
Kwestia wydajności to zupełnie osobny temat. Proponuję google i hasło "sql index". To jest dość skomplikowane....

Ten post edytował bpskiba 10.07.2012, 19:22:09
Go to the top of the page
+Quote Post
jarekhunter
post 10.07.2012, 21:20:16
Post #7





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 21.01.2010

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


WHERE jest po to by wyświetlało mi tylko artykuły na które nie wskazuje tabela tmp.
bez tego wyświetla mi tylko te na które wskazuje..

Nie jestem jakimś guru mysql ale co to jest Indexowanie to wiem, więc wujek google mi się nie przyda..
Ja pytałem o szybkość takiego zapytania, by ewentualnie coś poprawić itp.
Wydajność to nie tylko indexowanie więc albo kolega ma coś do napisania albo będzie się chował za google tylko.

No chyba że kolega zna inny sposób to chętnie zobaczę.

Panowie dziękuję serdecznie za naprowadzenie mnie na dobrą drogę no i pomoc.
Pozdrawiam serdecznie.

Ten post edytował jarekhunter 11.07.2012, 12:39:05
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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 21:33