Toon posts:

[SQL] probleem met query *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik het het volgende probleem waar ik tot nu toe niet goed uitkom.

ik ben met een cms bezig en heb (versimpeld) twee tabellen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
de tabel CONTENT, waar de content van de site in staat

CONTENT_ID | CONTENT_TEKST
1       | dit is content 1 blabla
2       | dit is content 2 blabla
3       | dit is content 3 bladerdeeg
4       | content 4, enz, enz

de tabel RELATIONS, omdat content een meer op meer relatie heeft met de content zelf.

CONTENT_ID1 | CONTENT_ID2
1        | 2
1        | 3
4        | 1

Nu haal ik met de volgende sql query de relaties die bij een content horen te voorschijn:
code:
1
2
3
4
5
6
SELECT CONTENT_ID2 AS [RELATIONID]
FROM RELATIONS
WHERE content_id1 = 1;
UNION SELECT CONTENT_ID1 AS [RELATIONID] 
FROM RELATIONS
WHERE content_id2 = 1;

Wat hieruit komt is
code:
1
2
3
4
RELATIONID
2
3
4

Dit werkt goed, maar nu wil ik de bijgehordende gegevens van de content ook eruit krijgen.
Ik wil dus bij de id's ook bv de tekst.

Nu heb ik de volgende query:
code:
1
2
3
4
5
6
7
SELECT RELATIONS.CONTENT_ID2 AS RELATIONID, CONTENT.CONTENT_TITLE
FROM CONTENT RIGHT JOIN RELATIONS ON CONTENT.CONTENT_ID = RELATIONS.CONTENT_ID2
WHERE (((RELATIONS.CONTENT_ID1)=3));

UNION SELECT RELATIONS.CONTENT_ID1 AS RELATIONID, CONTENT.CONTENT_TITLE
FROM CONTENT RIGHT JOIN RELATIONS ON CONTENT.CONTENT_ID = RELATIONS.CONTENT_ID2
WHERE (((RELATIONS.CONTENT_ID2)=3));

Hij pakt dan de gegevens uit de tabel CONTENT die overeenkomen met CONTENT_ID2 en dat is dus niet goed, dit gaat bv fout bij de laatste relatie, omdat hij hier de gegevens die horen bij CONTENT_ID1 moet pakken.


De oplossing zou binnen Access kunnen zijn: maak een query zoals de eerste die hier staat die een rij met de bijbehordende ID's teruggeeft, en maak een tweede query die de ID's uit de eerste query gebruikt en de bijbehorende gegevens erbij pakt.
Dit werkt wel binnen Access, maar de query moet binnen ASP werken, en de id die opgevraagd wordt is uiteraard variabel.


Iemand tips of oplossingen?

<edit>
vergeten op 't einde een goede titel geven...sorry...:)
</edit>

Verwijderd

Waarom heb je in vredesnaam die tabel 'relations' nodig? Staan daar artikelen in die gerelateerd zijn aan een bepaald artikel of staan daar de artikelen in die op dezelfde page staan als een ander artikel?

Ik snap verder niet wat je wilt bereiken met je query, je wilt toch alle artikelen naar boven halen die gerelateerd zijn aan een zeker artikel, toch?
code:
1
2
3
4
5
SELECT * FROM Articles WHERE ArticleID IN
(
     SELECT RelatedArticleID FROM RelatedArticles
     WHERE ArticleID=Articles.ArticleID
)

Verwijderd

Topicstarter
De tabel RELATIONS koppeld de content aan elkaar.
de content bestaat onder andere uit: afleveringen, acteurs, foto's, enz.
bij een aflevering kan bv een acteur of een foto horen, maar bij een acteur kan bv ook een foto horen.
Zo is er tussen de content een meer op meer relatie mogelijk.
(zie ook [topic=536627] voor m'n vorige topic hieronder)

De oplossing die je geeft zou dan in mijn situatie zo zijn
toch?:
code:
1
2
3
4
5
6
7
8
9
SELECT * FROM CONTENT WHERE CONTENT_ID IN
(
    SELECT CONTENT_ID2 AS [RELATIONID]
    FROM RELATIONS
    WHERE content_id1 = 3;
    UNION SELECT CONTENT_ID1 AS [RELATIONID] 
    FROM RELATIONS
    WHERE content_id2 = 3;
)

Maar dit kan volgens mij niet omdat je geen union in een subquery mag zitten.

Verwijderd

Dus wat jij wilt is:
- je hebt een aflevering, dan haal je alle gerelateerde zaken bij die aflevering op, bv acteurs
- tegelijkertijd haal je alle gerelateerde zaken bij die acteurs op, bv foto's
- tegelijkertijd haal je alle gerelateerde zaken bij die foto's op.

Wordt een grote brei volgens mij, vol met cyclische relaties, en dus niet uitvoerbaar in 1 query, maar in meerdere queries, bv dat je alle acteurs ophaalt en daarna alle gerelateerde zaken van een bepaalde acteur, 1 level diep.

Het punt is nl. dat jij een datamodel maakt dat entity-type free is en de semantische interpretaties van wat de waarden van de entities voorstellen in queries wilt vastleggen, op basis van input (dus de ene keer levert je query een setje foto's op als resultaat van de vraag welke gerelateerde zaken heb ik bij het gegeven 'acteur X', de andere keer levert dezelfde query alle acteurs op bij het gegeven 'aflevering Y'. )

Verwijderd

Topicstarter
nee,
met de query wil ik alle bijbehordende zaken van een bepaalde content maar niet de zaken die daar weer bij horen.

Dus wel van een aflevering bv de acteurs en foto's. Maar niet van die acteur zelf weer gerelateerde zaken.

Verwijderd

Op maandag 01 juli 2002 19:45 schreef zjos het volgende:
nee,
met de query wil ik alle bijbehordende zaken van een bepaalde content maar niet de zaken die daar weer bij horen.

Dus wel van een aflevering bv de acteurs en foto's. Maar niet van die acteur zelf weer gerelateerde zaken.
Nou, dat is dan toch simpel?
code:
1
2
3
4
5
6
7
8
9
SELECT DISTINCT * FROM CONTENT WHERE ContentID IN
(
    SELECT Content_ID1 FROM RELATIONS WHERE Content_ID2=@ParentID
)
OR
ContentID IN
(
    SELECT Content_ID2 FROM RELATIONS WHERE Content_ID1=@ParentID
)
Pagina: 1