Avatar billede artico Novice
05. juni 2007 - 14:12 Der er 2 kommentarer og
1 løsning

Udskrive fra 3 tabeller

Hej experter, jeg er kørt lidt fast ..
Jeg har en Tabel der hedder 'vare' med 'varenr', 'varenavn' og 'beskrivelse' på dansk og så
har jeg en tabel der hedder 'vare_sprog' med samme felter hvor jeg gemmer oversættelser og sidst med ikke mindst har jeg en tabel der hedder 'sprog'.

Nu vil jeg så gerne lave en udskrift så man kan se/rette de forskellige vare tekster til, den ser således ud:

  $result = mysql_query("SELECT 
         
          vare_sprog.id,
          vare_sprog.sprog_id,
          vare_sprog.vare_id,
          vare_sprog.varenavn,
          vare_sprog.beskrivelse,
         
          vare.id,
          vare.varenr,
        vare.varenavn,
        vare.beskrivelse,
        vare.synlig,
        vare.sort,
         
          sprog.id,
          sprog.sprog,
          sprog.forkortelse,
          sprog.flag,
          sprog.synlig,
          sprog.sort
                           
                   
  FROM vare_sprog, sprog, vare
  WHERE vare.synlig ='on'
  AND sprog.synlig ='on'
  ORDER BY vare.sort

MEN jeg vil gerne have at hvert varenummer udskrives det antal gange som der er sprog oprettet (DET ER OK) men så skal der kun komme tekster ud hvis der er nogle oversættelser i tabellen 'vare_sprog'

:-( Kan nogen hjælpe ?
Avatar billede kjulius Novice
05. juni 2007 - 16:02 #1
Det du har lavet er det man kalder en cartesian product join, altså hvor der ikke er relationer mellem de enkelte tabeller. Det resulterer er i, at for hver række i den første tabel udskrives alle rækker i den følgende og for hver række i denne tabel udskrives alle rækker i den tredie. Det er rigtigt godt i nogle situationer, men i din situation og med den tabelopbygning du har synes jeg det virker lidt forkert.

Hvad med

SELECT       
          vare_sprog.id,
          vare_sprog.sprog_id,
          vare_sprog.vare_id,
          vare_sprog.varenavn,
          vare_sprog.beskrivelse,
         
          vare.id,
          vare.varenr,
          vare.varenavn,
          vare.beskrivelse,
          vare.synlig,
          vare.sort,
         
          sprog.id,
          sprog.sprog,
          sprog.forkortelse,
          sprog.flag,
          sprog.synlig,
          sprog.sort
                           
                   
FROM vare
CROSS JOIN sprog
LEFT JOIN vare_sprog ON vare_sprog.sprogid = sprog.id AND varesprog.vareid = vare.id
WHERE vare.synlig ='on'
  AND sprog.synlig ='on'
ORDER BY vare.sort

CROSS JOIN er en anden måde at beskrive en cartesian product join, men bemærk at jeg nu har lavet en LEFT JOIN til vare_sprog i stedet. Det skulle sikre, at du stadig får listet alle kombinationer af varer og sprog, men at du kun får vist rækker fra vare_sprog, hvor kombinationen af vareid og sprogid er rigtig i forhold til den øjeblikkelige kombination af vare og sprog.
Avatar billede artico Novice
05. juni 2007 - 16:58 #2
OK, mange tak for hjælpen.. send et svar...
Avatar billede kjulius Novice
05. juni 2007 - 18:48 #3
Resultatet blev som du ønskede det? Okay, så er her et svar...
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