Avatar billede mkjaer Nybegynder
31. januar 2007 - 23:17 Der er 4 kommentarer og
1 løsning

Hente fra en tabel, hvis der er sammenfald i 2 andre tabeller?

Hejsa,

Jeg har følgende tabeller:

forhandler: id, navn
nyhedsbreve: id, indhold
forhandler_produkt_typer: forhandlerid, produkttypeid
nyhedsbrev_produkt_typer: nyhedsbrevid, produkttypeid

forhandler_produkt_typer: fortæller hvilke produkt-typer en forhandler forhandler. nyhedsbrev_produkt_typer fortæller hvilke produkt-typer et nyhedsbrev er relevante for.

Nu vil jeg gerne lave én query, hvor jeg finder de forhandlere, som skal modtage et givent nyhedsbrev. Kun de forhandlere som har sammenfaldende produkttyperid med det givne nyhedsbrev skal med.

Kan man det? Og hvordan?
Avatar billede limemedia Nybegynder
01. februar 2007 - 01:22 #1
For at finde alle der skal have dit nyhedsbrev no 1, brug denne kommando

SELECT f.navn, n.indhold
FROM forhandler AS f, nyhedsbreve AS n, forhandler_produkt_typer AS fpt, nyhedsbrev_produkt_typer AS npt
WHERE npt.nyhedsbrevid = '1' && npt.produkttypeid=fpt.produkttypeid && fpt.forhandlerid=f.id && npt.nyhedsbrevid=n.id

og hvis du kun vil have en pr. kunde, skal du have en
GROUP BY f.id
Avatar billede mkjaer Nybegynder
01. februar 2007 - 09:01 #2
Virker logisk - jeg leger lidt med det - og vender retur...
Avatar billede mkjaer Nybegynder
01. februar 2007 - 23:04 #3
Ok, jeg har udbygget den med et ekstra tjek - og det spiller perfekt:

SELECT f.navn, n.overskrift
FROM forhandler AS f, nyhedsbreve AS n, forhandler_produkt_typer AS fpt, nyhedsbrev_produkt_typer AS npt, nyhedsbrev_certificering AS nbc
WHERE npt.nyhedsbrevid = '11' && npt.produkttypeid = fpt.produkttypeid && fpt.forhandlerid = f.id && npt.nyhedsbrevid = n.id && f.certificering = nbc.certificeringid && nbc.nyhedsbrevid = '11'

Takker, post et svar, så du kan få pointene.

Tillægsspørgsmål:

I tabellen forhandler har jeg hhv. forhandlerne og eventuelle brugere hos forhandlerne. Dvs. forhandler kan oprette brugere, som står i samme tabel. Forskellen er at forhandler.forhandlerid hos brugerne er = den overordnet forhandlers id og hos de overordnede forhandlere er den = NULL.

Jeg vil gerne have brugerne med i min query, men udfordring består I at betingelserne i ovenstående query skal køres på den overordnet forhandlers post i tabellen, dvs.
forhandler_produkt_typer+nyhedsbrev_produkt_typer+nyhedsbrev_certificering skal tjekkes på overordnet forhandlers id.

Kan den knækkes, så byder jeg på en omgang point yderligere.

Takker forud,
Martin
Avatar billede limemedia Nybegynder
03. februar 2007 - 07:28 #4
Hej Martin,
Jeg er ikke helt sikker på om jeg forstår dig helt, men jeg tror du er ude efter

SELECT f.navn, n.overskrift
FROM forhandler AS f, nyhedsbreve AS n, forhandler_produkt_typer AS fpt, nyhedsbrev_produkt_typer AS npt, nyhedsbrev_certificering AS nbc
WHERE npt.nyhedsbrevid = '11' && npt.produkttypeid = fpt.produkttypeid && fpt.forhandlerid = f.id && npt.nyhedsbrevid = n.id && f.certificering = nbc.certificeringid && nbc.nyhedsbrevid = '11' && f.forhandlerid = NULL
Avatar billede mkjaer Nybegynder
05. februar 2007 - 22:27 #5
Hejsa,

Nej, det var ikke det jeg tænkte på. forhandler-tabellen indeholder f.eks. disse poster.

id navn            forhandlerid
1  Forhandler      NULL
2  Bruger          1
3  Forhandler      NULL
4  Bruger          3
5  Forhandler      NULL

Dvs. id 2 er bruger hos forhandleren id 1, ligesom id 4 er bruger hos forhandler id 3. Forhandler id 5 har ingen brugere tilknyttet.

I min query, vil jeg gerne have alle forhandlere, som opfylder betingelser, samt alle tilknyttede brugere, hos de forhandlere som opfylder betingelserne.

Giver det mening?

Hilsen
Martin
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