[PostgreSQL] Złożone zapytanie

0

Mam cztery tabele rules, articles, categories_in_rules, articles_in_categories
rules

Tabela z regułkami (niewykorzystywana w zapytaniu, ale może ułatwić zrozumienie problemu)
column | type
rid | int

Tabela łącząca jedną regułkę z wieloma kategoriami (które zawiera)
categories_in_rules
column | type
rid | int
cid | int

Tabela z artykułami.
articles
column | type
aid | int

Tabela łącząca jeden artykuł z wieloma kategoriami (w których się znajduje).
articles_in_categories
column | type
aid | int
cid | int

Teraz tak: dostaję rid regułki i musze wyciągnąć artykuły, których wszystkie kategorie zawierają się w kategoriach regułki.
Jeżeli mam w articles_in_categories
aid | cid
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
2 | 2
(czyli dwa artykuły, które należą odpowiednio do kategorii 1-4 i 1-2)
oraz w tabeli categories_in_rules
rid | cid
1 | 1
1 | 2
1 | 3
(czyli jedną regułkę obejmującą kategorie 1-3)

To w wyniku zapytania powinienem otrzymać tylko drugi artykuł (pierwszy nie mieści się w regułce).

0

o ile dobrze zrozumiałem to

SELECT a.aid FROM articles a, categories_in_rules b, articles_in_categories c
WHERE a.aid = c.aid AND c.cid = b.cid AND b.rid = twoja_katgoria

Jednak może to być źle, bo ciężko mi zrozumieć o co Ci chodzi

0

Problem w tym, że regułka do wybierania obejmuje kilka kategorii i artykuł też należy do kilku kategorii.
Chodzi o to, aby mając takie tabele jak wyżej (czyli jedna z artykułami, druga z tym do których kategorii (wielu) ten artykuł należy, a trzecia mówiąca które kategorie obejmuje regułka) po otrzymaniu identyfkatora regułki wybrać artykuły, których kategorie (wszystkie) zawierają się w kategoriach regułki.

Mam
pierwszy artykuł w kategoriach szkło, plastik, drewno
drugi artykuł w kategoriach tylko szkło, plastik
trzeci w drewno i plastik.

To regułka obejmująca tylko szkło nie zwróci nic.
Regułka obejmująca szkło i plastik zwróci drugi.
Regułka obejmująca szkło, plastik i drewno zwróci wszystkie trzy artykuły.

I nie bardzo jestem w stanie dojść jak i czy w ogóle daje się to zrobić jednym zapytaniem czy będe musiał tworzyć jakieś tymczasowe tabele :/

0
Elmo napisał(a)

Mam
pierwszy artykuł w kategoriach szkło, plastik, drewno
drugi artykuł w kategoriach tylko szkło, plastik
trzeci w drewno i plastik.

To regułka obejmująca tylko szkło nie zwróci nic.
Regułka obejmująca szkło i plastik zwróci drugi.
Regułka obejmująca szkło, plastik i drewno zwróci wszystkie trzy artykuły.

I nie bardzo jestem w stanie dojść jak i czy w ogóle daje się to zrobić jednym zapytaniem czy będe musiał tworzyć jakieś tymczasowe tabele :/

wpisywałeś to zapytanie i nie dostałeś tego ze szkłem, czy prowadzisz rozmyślania czy to zadziałą czy nie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1