Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Złączenie trzech tabel, Problem
Diwi
post 15.09.2006, 17:26:37
Post #1





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


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
Go to the top of the page
+Quote Post
Skobi
post 16.09.2006, 10:08:29
Post #2





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

Ostrzeżenie: (10%)
X----


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
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: 26.06.2025 - 09:52