Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Złączanie tabel z danymi
Forum PHP.pl > Forum > Przedszkole
kkuubbaa88
witam

złączam kilka tabel ze sobą po głównym id. przykładowo pole o nazwie 'id_wiersza' ma każda tabela i jest w niej numer, który identyfikuje każdy z wierszy. Podczas złączenia następuje połączenie wszystkich tabel bez względu na to czy istnieje dany wiersz czy tez nie. dlatego do części używam inner join, a do niektórych left join.

problem polega na tym, że używając polecenia left join w momencie gdy podłączam tabele, w której nie znajduje się podany wierszy o tym samym id dane mimo tego są dopisywane do wyników w formie pól z zawartością NULL. Chciałbym podpinać tylko te tabele w których znajduje się dany wiersz.

haczyk jest w tym, że podczas zapytania złączam wszystkie tabele ze sobą i chciałbym, aby wynik był bez pól z tabel, które nie posiadają danego wiersza.

jak to zrobic ? jakie polecenie trzeba zadac ? czy w ogóle jest to możliwe ?

pozdrawiam

czy ktoś może pomóc ?
sadistic_son
Używaj WHERE.
  1. SELECT pierwsza.costam , druga.costam FROM pierwsza, druga WHERE pierwsza.foreignkey_druga = druga.id_wiersza
kkuubbaa88
czy w takim przypadku gdy braknie jakiegos wiersza z dodawanej tabeli cale zapytanie sie nie wywali ? tzn, nie wyskoczy przypadkiem blad ?

dodatkowo nie wiem czy podczas zlaczania okolo 15-20 tabel takie rozwiazanie bedzie wydajne w porownaniu do join ?

questionmark.gif
sadistic_son
Cytat(kkuubbaa88 @ 18.08.2010, 09:00:45 ) *
czy w takim przypadku gdy braknie jakiegos wiersza z dodawanej tabeli cale zapytanie sie nie wywali ? tzn, nie wyskoczy przypadkiem blad ?
Jak sprawdzisz u siebie to będziesz mieć odpowiedź...... Po prostu NIC się nie pokaże, jeśli nie będzie warunków do spełnienia zapytania.
kkuubbaa88
wlasnie o tym mówiłem... a to rozwiązanie nie jest dobre, ponieważ podczas złączania jest z 6 tabel, ktore zawsze maja wszystkie wiersze i reszta jest wypelniana wybiórczo, wedle upodobań użytkownika. Z racji takiej, że chcę to zrobić w jednym zapytaniu musze wszystkie podłączyć tak, aby sie wyswietlaly tylko tabele z danymi w danym wierszu, a nie NIC jak sam zauwazyles...
thek
A to nie możesz dać w warunku, że określone pole jednej z tabel nie może być NULL? Ja tak wycinam wiersze i działa winksmiley.jpg Masz tabele - łączysz. Któraś z nich nie ma odpowiednika - wypełnia się nullami jak sam zauważyłeś. Wybieram którąś z kolumn tej dołączanej (najlepiej ta po której łączysz, bo na pewno wtedy będzie NULL) i w WHERE określam, że nie ma być tam NULL. Tak się wycina owe niepołączone z niczym wiersze. Warunek walisz jako AND dla każdej dołączanej tabeli. JOINujesz w sumie 5 tabel? To będzie 5 razy AND kolumna ISNOTNULL smile.gif Sprawdź sam winksmiley.jpg
kkuubbaa88
i to jest dobre rozwiazanie smile.gif co prawda warunkow bedzie ponad 15, ale chyba nie straci duzo na wydajnosci.

czy to isnotnull ma byc pod koniec zapytania w sekcji where ? jezeli tak to raczej nie dziala to poprawnie, poniewaz wtedy gdy kolumna przy podlaczeniu jest null to cale zapytanie nie zostaje wykonane... a nie tak jak chcialem nie zostanie podlaczona tabela.
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.