JOIN problem i MySQL. HJÆLP! :)

Tags:    php

Jeg har et SQL problem som jeg ikke rigtig kan finde ud af at løse i MySQL:

Ok, Jeg har 3 tabeller: En kaldet "images", en anden kaldet "categories"og den sidste kaldet "bindings".

"images" tabellen indeholder en liste ovre alle billedenavne fx:

id - name
---------
1 - Man
2 - Woman
3 - Child
4 - Dog
5 - Cat
6 - Banana
7 - Car


"categories" tabellen indeholder en liste over de kategorier som billederne senere kan tilføjes fx:

id - name
---------
1 - Family
2 - Animals
3 - Humans


"bindings" tabellen indeholder en liste over hvilke billeder der er i hvilke kategorier. (Standard mange til mange relation som i ved) fx:

imageid - catid
---------------
1 - 1
2 - 1
3 - 1
4 - 1
5 - 1
4 - 2
5 - 2
1 - 3
2 - 3
3 - 3

Ok, nu er det jo som bekendt ret simpelt at lave en JOIN af alle disse tabeller, fx hvis jeg vil finde alle de billeder der er i kategorien "Animals":

SELECT images.name FROM images,categories,bindings WHERE categories.id=2 AND images.id=bindings.imageid AND categories.id=bindings.catid

Mit problem er så:
Hvordan selecter jeg de billeder der ikke er i en kategori? Query'en vil komme til at indeholde "Banana" og "Car" hvis vi bruger disse test data.

Jeg mener at vi her snakker om Sub Selects som MySQL jo ikke understøtter? Men jeg er ikke sikker. Nogen der har et forslag til hvordan det kan løses?

Trekster
www.trekster.dk - www.filmz.dk



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato


(...CUT...)

Jeg mener at vi her snakker om Sub Selects som MySQL jo ikke understøtter? Men jeg er ikke sikker. Nogen der har et forslag til hvordan det kan løses?


Vælger en database der kan? :-)

Det du leder efter er vel noget i retningen af:

SELECT * FROM images WHERE id NOT IN (SELECT imageid FROM bindings);

Det kan omskrives til:

SELECT images.* FROM images LEFT JOIN bindings ON images.id=bindings.imageid WHERE bindings.imageid IS NULL;

Det skal lige siges at jeg kun har testet det på PostgreSQL, men mon ikke det også virker på MySQL?

/data






Jeg har et SQL problem som jeg ikke rigtig kan finde ud af at løse i MySQL:

Ok, Jeg har 3 tabeller: En kaldet "images", en anden kaldet "categories"og den sidste kaldet "bindings".

"images" tabellen indeholder en liste ovre alle billedenavne fx:

id - name
---------
1 - Man
2 - Woman
3 - Child
4 - Dog
5 - Cat
6 - Banana
7 - Car


"categories" tabellen indeholder en liste over de kategorier som billederne senere kan tilføjes fx:

id - name
---------
1 - Family
2 - Animals
3 - Humans


"bindings" tabellen indeholder en liste over hvilke billeder der er i hvilke kategorier. (Standard mange til mange relation som i ved) fx:

imageid - catid
---------------
1 - 1
2 - 1
3 - 1
4 - 1
5 - 1
4 - 2
5 - 2
1 - 3
2 - 3
3 - 3

Ok, nu er det jo som bekendt ret simpelt at lave en JOIN af alle disse tabeller, fx hvis jeg vil finde alle de billeder der er i kategorien "Animals":

SELECT images.name FROM images,categories,bindings WHERE categories.id=2 AND images.id=bindings.imageid AND categories.id=bindings.catid

Mit problem er så:
Hvordan selecter jeg de billeder der ikke er i en kategori? Query'en vil komme til at indeholde "Banana" og "Car" hvis vi bruger disse test data.

Jeg mener at vi her snakker om Sub Selects som MySQL jo ikke understøtter? Men jeg er ikke sikker. Nogen der har et forslag til hvordan det kan løses?

Trekster
www.trekster.dk - www.filmz.dk


Hey Trekster

Jeg tror nok jeg ville selecte image.id og bruge den til at scanne bindings.imageid og så returne dem der er lig null...
like this.....

SELECT * FROM images LEFT JOIN bindings ON images.id=bindings.imageid WHERE bindings.imageid IS NULL;

jeg tror nok det er det du vil?
Hilsen

/Loop
Give me a life




SELECT * FROM images LEFT JOIN bindings ON images.id=bindings.imageid WHERE bindings.imageid IS NULL;

jeg tror nok det er det du vil?
Hilsen

/Loop
Give me a life



Øhh... Det er nøjagtigt det jeg har skrevet ovenover. Hvis du ikke har noget nyt at bidrage med, hvorfor i alverden bruger du så tid på at svare?

/data




Øhh... Det er nøjagtigt det jeg har skrevet ovenover. Hvis du ikke har noget nyt at bidrage med, hvorfor i alverden bruger du så tid på at svare?

/data
-----------------------------------------------------------------------------
Du har jo så evigt ret, jeg havde nok bare ikke læst dit svar grundigt nok.
Jeg er dog af den mening at hvis man er her, så skal man også svare hvis man kender svaret, og jo jeg har andet at bruge min tid på.


/Loop





Du har jo så evigt ret, jeg havde nok bare ikke læst dit svar grundigt nok.
Jeg er dog af den mening at hvis man er her, så skal man også svare hvis man kender svaret, og jo jeg har andet at bruge min tid på.

/Loop


Selvfølgelig skal man svare hvis man kender svaret, men jeg vil mene at man kun skal gøre det hvis man har noget nyt at tilføje. Ellers drukner det hele 117 varianter af den samme løsning

/data



t