Avatar billede akyhne Nybegynder
06. juli 2010 - 00:46 Der er 5 kommentarer og
1 løsning

LEFT JOIN...

Jeg har to tabeller. collection & mine.
Collection indeholder "items", mine indeholder listen over hvilke "items" en bruger har.

Jeg skal have kaldt listen frem af items, en bestemt bruger ikke har, samt er i den rigtige kategori.

Collection:
item | name | cat
1    | abc  |  1
2    | def  |  1
3    | ghi  |  2
4    | jkl  |  1


mine:
user_id | item
1      | 2

Fra collection skal resultatet være item 1 & 4 da item 2 allerede ejes af user_id 1 & item 3 ewr den forkerte categori (2).

Altså noget a la:
SELECT col.item, col.name, col.thumb, col.pop_name, col.category
        FROM collection AS col
            LEFT JOIN mine AS m ON m.item = col.item
        WHERE  m.user_id != 1 AND col.category = 1
        ORDER BY col.name ASC
Avatar billede arne_v Ekspert
06. juli 2010 - 00:59 #1
SELCT *
FROM collection
WHERE cat=X AND item NOT IN (SELECT item FROM mine WHERE user_id=Y)

?
Avatar billede akyhne Nybegynder
06. juli 2010 - 01:16 #2
Ser ud til det virker. Men er det en hensigtsmæssig måde at gøre det på? Man kalder jo SELECT 2 gange. Hvad hvis det er en stor tabel? Og hvorfor skal jeg ikke bruge LEFT JOIN?

Smid et svar.
Avatar billede arne_v Ekspert
06. juli 2010 - 01:35 #3
Den er kun tung hvis den indre SELECT returnerer rigtigt mange rækker.
Avatar billede arne_v Ekspert
06. juli 2010 - 01:37 #4
Den bør kunne laves som JOIN også. Men jeg synes at WHERE NOT IN er nemmere at læse.

Prøv:

SELCT *
FROM collection LEFT JOIN mine ON collection.item=mine.item AND mine.user_id=Y
WHERE collection.cat=X AND mine.item IS NULL
Avatar billede arne_v Ekspert
06. juli 2010 - 01:38 #5
og et svar
Avatar billede akyhne Nybegynder
06. juli 2010 - 02:06 #6
Virker perfekt :)

Bruger nok den sidste, da jeg ellers er nødt til at opdele den i 2 SQL kald, grundet måden SQL kald i SMF er opbygget, ikke tillader en SELECT i strengen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester