Avatar billede krydset Nybegynder
22. januar 2004 - 11:01 Der er 20 kommentarer og
2 løsninger

Lidt hjælp til relations database

Hejsa, jeg søger lidt hjælp til lidt relation db, sikkert let for jer ;)

Jeg har 2 tabeller dump af dem her.

1.
indh. film kategorier
-----------------------
CREATE TABLE `kategori` (
  `kat_id` int(11) NOT NULL auto_increment,
  `kategori` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`kat_id`)
) TYPE=MyISAM

2.indh. filmene

-------------------------------
CREATE TABLE `film` (
  `id` int(11) NOT NULL auto_increment,
  `titel` varchar(255) NOT NULL default '',
  `beskrivelse` text NOT NULL,
  `kategori` varchar(255) NOT NULL default '',
  `lengde` varchar(50) NOT NULL default '',
  `aar` varchar(50) NOT NULL default '',
  `ejer` varchar(255) NOT NULL default '',
  `status` varchar(255) NOT NULL default '',
  `note` text NOT NULL,
  `dato` varchar(25) NOT NULL default '',
  `pic_sti` varchar(255) NOT NULL default '',
  `type` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
)

Mit egentlige problem er at jeg skal ha joined så jeg kan tælle hvormange film der er i hver kategori.

Nogen der har et bud
relationen i de 2 tabeller er kategori.
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 11:07 #1
select kategori.kategori as kat,count(*) as antal from kategori,film where kategori.kategori=film.kategori
Avatar billede dsj Nybegynder
22. januar 2004 - 11:11 #2
Først skal du have tilføjet kolonnen 'kat_id' i tabellen film også, så du kan se hvilken kategori hver enkelt film tilhører.

Det kan give problemer at have tabeller med samme titel, som kolonner, f.eks. har tabellen kategori en kolonne 'kategori'. Det gør ikke noget at tabellen film har kolonnen 'kategori'...

Hvis jeg husker ret, skulle følgende virke:

SELECT COUNT(*) AS antal, kategori.kategori FROM kategori, film WHERE kategori.kat_id = film.kat_id GROUP BY kategori.kat_id
Avatar billede krydset Nybegynder
22. januar 2004 - 11:11 #3
Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
Avatar billede krydset Nybegynder
22. januar 2004 - 11:12 #4
den giver denne fejl erik jacobsen
Avatar billede dsj Nybegynder
22. januar 2004 - 11:13 #5
Ja, jeg overså at du joiner de to tabeller på kategori.kategori og film.kategori. At joine tabeller på String-typer skaber dårlig performance og er generelt ikke pænt database-design. Dog vil det virke, og hastighed får du ingen problemer med, så længe databasen er af lille størrelse. Jeg har lige rettet sql-sætningen til af joine på kategori-kolonnerne:

SELECT COUNT(*) AS antal, kategori.kategori FROM kategori, film WHERE kategori.kat_id = film.kategori GROUP BY kategori.kategori
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 11:15 #6
Nå ja, jeg fik trykket for hurtigt på knappen. Du skal have tilføjet lidt ;)

  select kategori.kategori as kat,count(*) as antal from kategori,film where kategori.kategori=film.kategori group by kategori.kategori
Avatar billede krydset Nybegynder
22. januar 2004 - 11:16 #7
Den udskriverbare ikke noget :-(

Hvordan ville dit bud være på den skulle se ud
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 11:25 #8
Står der det samme i de to felter, der hedder kategori?
Avatar billede krydset Nybegynder
22. januar 2004 - 11:25 #9
okay erik din virker næsten, jeg kan bare ikke få den til at udskrive kategorierne, hvorn pokker gør jeg det
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 11:26 #10
Jeg kom til at kalde feltet for "kat" i den SELECT her - derfor?
Avatar billede krydset Nybegynder
22. januar 2004 - 11:29 #11
Takker ERIK, skal du ha point (tør næsten ik spørge) OHOH :-D
Avatar billede krydset Nybegynder
22. januar 2004 - 11:48 #12
=???
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 11:54 #13
Nej, tak ingen point. (og er jeg lidt langsom, så er det fordi eksperten.dk ikke
har lyst til at sende mig mails)

Men ellers er det da rigtigt at du kan overveje den join lidt bedre. Du bør
bruge kat_id i stedet for kategori, og så bør fremmednøglen være et index.
Avatar billede krydset Nybegynder
22. januar 2004 - 12:19 #14
Ja det have jeg osse, tænkt på, må gøre det på et tidspunkt.

Hvad mener du med fremmednøglen??
Avatar billede dsj Nybegynder
22. januar 2004 - 12:22 #15
Hm, synes lidt mit svar er blevet overset, er det ikke rigtigt? Nåh, men skidt :)
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 12:23 #16
film.kategori er fremmednøglen.
Avatar billede krydset Nybegynder
22. januar 2004 - 13:35 #17
dsj, dit svar gav ikke noget retur, men det gjorde eriks, men eftersom erik ikke vil ha point, deler jeg dem med dig for du prøvede da ;)

Oki erik takker for det :-D
Avatar billede dsj Nybegynder
22. januar 2004 - 13:37 #18
Mit svar er eller præcis det samme som eriks, bortset fra at han kalder det returnerede kategori.kategori for 'kat'...
Avatar billede krydset Nybegynder
22. januar 2004 - 13:47 #19
Okay det må du undskylde, prøvede osse dit men det gav ikke noget til at starte med, må ha lavet en fejl, skal du ha flere point :-O
Avatar billede dsj Nybegynder
22. januar 2004 - 14:01 #20
Nej, det er ligemeget :)
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 18:49 #21
dsj: ingen af dine løsninger sammenligner de rigtige felter - derfor vil det ikke
virke som det står. Men det er klart at han bør sammenligne på id-erne i stedet for.
Avatar billede dsj Nybegynder
22. januar 2004 - 22:39 #22
argh, ja det er da vidst en copy/paste fejl - mente selvf. kategori.katagori = film.kategori
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