Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Jak zbudować zapytanie, pobieranie danych z jednej tabeli tylko jeśli w innej brak danej wartości
Forum PHP.pl > Forum > Przedszkole
jarekhunter
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.
piotrex41
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.
jarekhunter
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..
jarekhunter
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
bpskiba
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....
jarekhunter
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.