22. juli 2010 - 22:24Der er
5 kommentarer og 2 løsninger
Select mellem 5 tabeller
Jeg har fem tabeller som jeg skal have kædet sammen i en select stmt (til et view). Det er en kategori tabel som indeholder et id og navn og så fire 'mange til mange' tabeller, strukturen er:
category(int cat_id, varchar name) tabl1_cat(int cat_id, int tabl1_id) tabl2_cat(int cat_id, int tabl2_id) tabl3_cat(int cat_id, int tabl3_id) tabl4_cat(int cat_id, int tabl4_id)
det jeg så gerne vil ende ud med er en tabel som laver et count på hvor mange rows fx tabl1 har med kategorien 'dyr', så jeg skulle gerne ende med en struktur ala denne:
Nu ved jeg ikke hvorfor at du har fire relationstabeller, men da de er ens i opbygningen kunne du jo starte med at union'ne dem sammen til én tabel
Lidt oracle syntax...
select name, count(*) from category, (select cat_id, tabl1_id tabl_id, '1' fromtabl from tabl1_cat union all select cat_id, tabl2_id tabl_id, '2' fromtabl from tabl2_cat union all select cat_id, tabl3_id tabl_id, '3' fromtabl from tabl3_cat union all select cat_id, tabl4_id tabl_id, '4' fromtabl from tabl4_cat ) rels where category.cat_id=rels.cat_id group by name;
grunden til at jeg har fire tabeller, er at kategorierne kan kædes sammen med fx. nyheder, kalender, etc. hvis du har et bedre forslag til design så høre jeg da gerne :)
Desværre så får jeg ikke helt det ønsket resultat af query'en den kommer med et total count og jeg skulle gerne have den delt counten ud på de fire tabeller, så jeg kan se hvor mange af hver kategori der er i de enkelte 'mange-til-mange' tabeller!
select name, fromtabl, count(*) from category, (select cat_id, tabl1_id tabl_id, '1' fromtabl from tabl1_cat union all select cat_id, tabl2_id tabl_id, '2' fromtabl from tabl2_cat union all select cat_id, tabl3_id tabl_id, '3' fromtabl from tabl3_cat union all select cat_id, tabl4_id tabl_id, '4' fromtabl from tabl4_cat ) rels where category.cat_id=rels.cat_id group by name, fromtabl;
Fint, du kan bare lave et view der joiner de fire tabeller sammen, med en tredje kolonne der fortæller hvilken tabel det kom fra. herefter er det bare at joine viewet med din category tabel - i mysql/ansi syntax naturligvis. det finder du nok ud af eller også kommer der måske en kommentar fra en øvet mysql bruger.
SELECT cat.cat_id, cat.cat_name, count(tb1.id), count(tb2.id), count(tb3.id), count(tb4.id) FROM category as cat left join tabl1 as tb1 on cat.cat_id = tb1.cat_id left join tabl2 as tb2 on cat.cat_id = tb2.cat_id left join tabl3 as tb3 on cat.cat_id = tb3.cat_id left join tabl4 as tb4 on cat.cat_id = tb4.cat_id group by cat.cat_id
så skulle resultaterne gerne komme ud i hver sin column!
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.