Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Złączenie trzech tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
Diwi
Witam,
Natrafiłem na pewny problem podczas wyciągania danych z bazy danych. Tak więc mam trzy tabele (skrypt dodawarki do katalogów winksmiley.jpg):

sites z kolumnami: site_id, user_id, site_url, site_anchors, site_descriptions, site_authoremail, site_categories, site_subcategories

catalogs: catalog_id, catalog_url, accepted, typ, pagerank

reports: report_id, site_id, added_catalog_id, report_text, report_type

I teraz mamy np. jedną stronę dodaną do sites z ID 1 (reszta jest akurat nie ważna przy tym co próbuję rozwiązać), do tego mamy trzy katalogi stron o ID: 1,2,3

Teraz jeśli w reports widnieje wiersz gdzie site_id=1 i np. added_catalog_id=2 to znaczy że strona o ID 1 została dodana do katalogu o ID 2, teraz zakładamy że w report widnieją trzy wiersze o site_id=1 i added_catalog_id kolejno od 1 do 3 co oznacza że strona została dodana do trzech katalogów.

Teraz chciałbym wyciągnąć do jakich katalogów została dodana strona więc zrobiłem zapytanie:

  1. SELECT s.*, c.*, r.* FROM sites s, catalogs c, reports r WHERE r.site_id='1' AND c.catalog_id IN ( r.added_catalog_id ) AND s.site_id='1


Tutaj wszystko jest spoko i otrzymuje 3 katalogi, problem zaczyna się gdy chce wyciągnąć do jakich katalogów nie została dodana (zakładamy że w bazie jest razem około 800 katalogów) tak więc takie zapytanie:


  1. SELECT s.*, c.*, r.* FROM sites s, catalogs c, reports r WHERE r.site_id='1' AND c.catalog_id NOT IN ( r.added_catalog_id ) AND s.site_id='1


Powinno wyciągnąć 797 rekordów ale nie ono wyciąga koło 2300 ohmy.gif

Czy ktoś mógłby mnie naprowadzić jak rozwiązać ten problem i aby wyciągał taką ilość katalogów jaką powinien (mogę spokojnie przebudować tabelę itp. winksmiley.jpg) ?

Pozdrawiam
Skobi
tak na szybko bez sprawdzania to powinno wygladać to tak:

  1. SELECT *
  2. FROM catalogs c LEFT OUTER JOIN reports r ON ( c.catalog_id = r.added_catalog_id AND r.site_id = 1 )
  3. WHERE r.reports_id IS NULL
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.