Avatar billede htx98i17 Professor
31. oktober 2011 - 16:26 Der er 10 kommentarer og
1 løsning

spejl af artikel

Jeg har en tabel med artikler "tblartikler" hvor feltet "position" definerer hvilket gruppe den tilhører.

En artikel kan også ligge i andre grupper. Derfor har jeg tblspejl som har følgende felter: id, vareid, position.

Nu skal jeg så have lavet en sql der henter artikler fra tblartikler hvor den også henter spejlprodukter.

Jeg har følgende, men som slet ikke henter artikler, hvis der ikke er et spejlartikel tilhørende den gruppe.

SELECT
    ta.id,
    ta.varetekst,
    ta.type,
    ta.navn,
    ta.salgspris,
    ta.listepris,
    ta.visibility,
    ta.totalvaegt,
    ta.lastevne,
    ta.bredde,
    ta.laengde,
    ta.hoejde,
    ta.frontpage,
    ta.vaegt,
    ta.lagerfoeres,
    ta.producentid,
    tst.antal as beholdning

FROM
    tblartikler AS ta,
    tblspejl AS tsp

LEFT JOIN
    tblstock as tst ON
        tst.ean = ta.ean
   
WHERE
    (ta.position = '41'
    AND ta.visibility)
    OR
    (tsp.position = '41'
    AND tsp.vareid = ta.id
    AND ta.visibility)


Så problemet er altså, at hvis der ingen spejlartikler er i gruppen, så henter den slet ingen artikler.

Er det noget med en JOIN OUTER/INNER/LEFT?
Avatar billede arne_v Ekspert
31. oktober 2011 - 16:35 #1
tblartikler LEFT JOIN tblspejl ON et eller andet

lyder som det du har brug for
Avatar billede arne_v Ekspert
31. oktober 2011 - 16:36 #2
tblartikler LEFT JOIN tblspejl ON tsp.vareid = ta.id

vil jeg tro
Avatar billede htx98i17 Professor
31. oktober 2011 - 16:46 #3
Den her bør finde 6 produkter hvoraf den ene er et spejl.
Men den finder kun de 5.

SELECT
    ta.id,
    ta.varetekst,
    ta.type,
    ta.navn,
    ta.salgspris,
    ta.listepris,
    ta.visibility,
    ta.totalvaegt,
    ta.lastevne,
    ta.bredde,
    ta.laengde,
    ta.hoejde,
    ta.frontpage,
    ta.vaegt,
    ta.lagerfoeres,
    ta.producentid,
    tst.antal as beholdning

FROM
    tblartikler AS ta

LEFT JOIN
    tblstock as tst ON
        tst.ean = ta.ean

LEFT JOIN
    tblspejl AS tsp ON
        tsp.position = '41'   
        AND tsp.vareid = ta.id
        AND ta.visibility
WHERE
    ta.position = '41'
    AND ta.visibility
Avatar billede arne_v Ekspert
31. oktober 2011 - 17:33 #4
Og den sidste bliver ikke frasorteret af WHERE ?
Avatar billede htx98i17 Professor
31. oktober 2011 - 17:35 #5
den er i hvert fald synlig.
spejlproduktet ligger naturligvis ikke i position 41, men i en helt anden. Er det et problem? :)
Avatar billede htx98i17 Professor
31. oktober 2011 - 17:38 #6
tsp.position fortæller at den skal være spejlet i position 41, og ikke at produktet i tblartikler skal have defineret position 41.
Avatar billede JensPeterSvensson Nybegynder
02. november 2011 - 08:44 #7
Hvis du skriver en select (A) der henter artiklerne spejlet og en select (B) der henter alle de rigtige artikler.

Kan du oprette en UNION mellem dem.

A UNION B
Avatar billede htx98i17 Professor
02. november 2011 - 09:39 #8
Tak for svar Jens. Jeg kunne godt bruge et kodeeksempel.
Avatar billede JensPeterSvensson Nybegynder
02. november 2011 - 10:59 #9
Umiddelbar burde du kunne skrive dem selv. Men tror det var en dårlig ide alligevel da det at finde spejlene kræver, at du først finder varens id.
Avatar billede htx98i17 Professor
02. november 2011 - 17:02 #10
Vil det sige at der slet ikke er en løsning?
Avatar billede htx98i17 Professor
23. juli 2012 - 15:08 #11
Tak for deltagelsen
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