Avatar billede mishrah Nybegynder
06. marts 2013 - 22:27 Der er 4 kommentarer og
1 løsning

Udtræk fra mange tabeller (JOIN?)

Hej gutter,

Jeg har et system til udlejning af varer, hvor jeg har brug for at trække en oversigt over hvilke varetyper der er booket i de næste 4 uger.

Tabelstrukturen er således:
(forsimplet for overblikkets skyld)

[Bookinger]
id (int)
bookingNr (varchar)
vareId (int - relateret til Varer-tabellens id)
bookingDato (int - unix timestamp)

[Varer]
id (int)
navn (varchar)
varetype (int - relateret til Varetyper-tabellens id)

[Varetyper]
id (int)
navn (varchar)

Jeg har fuldstændig styr på at udregne start- og slut-datoer for ugerne, så det jeg har brug for at et SQL udtræk der giver mig følgende sammentælling (eksempel):

Varetype |  Antal bookinger
--------------------------------------
Type1      |  2
--------------------------------------
Type2      |  4
--------------------------------------
Type3      |  4
--------------------------------------

Første kolonne er navnet på varetypen, men anden kolonne er antallet af bookinger af den varetype.

Jeg kan sagtens lave et count på antal bookinger indenfor en given periode, men jeg kan ikke finde ud af SQL'en til at få dem listet efter varetyper.

Håber der er nogen der kan hjælpe,
På forhånd tak,
/Martin
Avatar billede acore Ekspert
06. marts 2013 - 22:53 #1
Noget i stil med - i hvert fald i MYSQL (ikke testet):

SELECT tt.navn, COUNT(tb.id) FROM Bookinger AS tb
LEFT JOIN Varer AS tv ON tb.vareId = tv.id
LEFT JOIN Varetyper AS tt ON tv.varetype = tt.id
GROUP BY tt.id
Avatar billede mishrah Nybegynder
06. marts 2013 - 23:22 #2
Det er helt perfekt - lige hvad jeg manglede! :D
Skulle dog tilføje tt.navn til GROUP BY clause, da MSSQL kræver dette.

Men det er spot-on og har reddet min aften :)
Smid gerne lige et svar, så du kan få nogle point!

/M
Avatar billede mishrah Nybegynder
07. marts 2013 - 08:39 #3
Dog et hurtigt spørgsmål:
Kan man sikre at der altid listes alle varetyper, og så med antal=0 hvis der ikke er nogen, dvs:

Varetype |  Antal bookinger
--------------------------------------
Type1      |  2
--------------------------------------
Type2      |  0
--------------------------------------
Type3      |  1
--------------------------------------
Type4      |  4
--------------------------------------
Type5      |  0
--------------------------------------
Type6      |  4
--------------------------------------

Lige nu får jeg kun de varetyper, hvor der findes bookinger til.. :)
Hvis det ikke kan lade sig gøre, smider du bare et svar alligevel - det har været en kæmpe hjælp uanset :)

/M
Avatar billede niklask Nybegynder
07. marts 2013 - 11:24 #4
Avatar billede acore Ekspert
07. marts 2013 - 15:15 #5
Godt du kunne bruge det!

Hvis svaret i #4 ikke virker, så prøv med at lade den tabel, du vil have alle med fra være den første (altså SELECT fra Varetyper) og så JOIN de andre på.
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