05. juni 2007 - 14:12Der 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:
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'
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.
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.
Resultatet blev som du ønskede det? Okay, så er her et svar...
Synes godt om
Ny brugerNybegynder
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.