Avatar billede poull Nybegynder
15. april 2003 - 20:11 Der er 15 kommentarer og
1 løsning

flere id henvisninger per post

Som et lidt simplificeret eksempel kan man forestille sig at jeg har to tabeller:

Tabel billeder
- id
- kategorier
- data

Tabel kategorier
- id
- kategori

Jeg har brug for at hvert billede kan tilhøre flere kategorier. Altså fx kategori 2 og 5. Spørgsmålet er så om det gøres med en datatype i tabellen billeder og i så fald hvilken? Man kunne selvfølgelig have flere id'er stående i en tekststreng men dette kan da ikek være særlig optimalt?
Avatar billede lap Nybegynder
15. april 2003 - 20:15 #1
Dette laves vha. af en tredie tabel - en join tabel. Tabellen kunne f.eks. være:

tabel billed_kat
- id
- billed_id
- kat_id

Her kan du lægge alle records ind - og efterfølgende joine.
Avatar billede poull Nybegynder
15. april 2003 - 20:46 #2
Dvs at for hvert id henvisning et billede skal have, laves der en post i denne join tabel?

Hvordan vil opbygningen i en SQL sætning så være (bare ca) hvis jeg ønsker at vælge alle billeder med tilhøre en bestemt kategori?
Avatar billede lap Nybegynder
15. april 2003 - 20:50 #3
ja

select billeder.*
from  billed_kat, billed
where billeder.id = billed_kat.billed_id
and  billed_kat = <kategori_id der skal findes>;
Avatar billede poull Nybegynder
15. april 2003 - 21:04 #4
Ok .. takker ;)
Avatar billede poull Nybegynder
15. april 2003 - 21:38 #5
Selv om jeg har accepteret dit svar så har jeg et lille spørgsmål som du måske også lige kan hjælpe mig med. Når jeg vil vise en kategori oversigt så ønsker jeg dels i parantes at vise hvor mange billeder som tilhører den kategori samt sortere dem efter dette antal henvisninger. Noget du/andre kan hjælpe med?
Avatar billede lap Nybegynder
15. april 2003 - 21:42 #6
select billed_kat.kat_id,count(*)
from billed_kat
group by billed_kat.kat_id
order by count desc:

Det giver ingen ledetekster på dine kategorier - så skal der lige joines til kategorier
Avatar billede poull Nybegynder
15. april 2003 - 22:21 #7
Nu har jeg prøvet mig lidt frem og jeg tror at dette er en query der burde virke, men den siger fejl ved count(catsjoin.*)

SELECT cats.*, catsjoin.catid, count(catsjoin.*)
FROM cats, catsjoin
GROUP BY catsjoin.catid
ORDER BY count DESC
Avatar billede lap Nybegynder
15. april 2003 - 23:16 #8
Hvad vil du trække ud?

Hvis det er med ledetekst bør det nok være:

select cats.kategori, count(*)
from cats, catsjoin
where cats.id = catsjoin.cats_id
group by cats.kategori
order by count desc:

Du skal lige tænke lidt mere selv - group by skal hænge sammen med din select linie, og hvis du joiner, så skal du også joine (where). Desuden er det lidt nemmere, hvis du beskriver tabellerne korrekt - kategori er åbenbart cats - ikke specielt sigende - men heller ikke nemt for mig at skrive en korrekt select.
Avatar billede lap Nybegynder
15. april 2003 - 23:17 #9
fejl i order by
Skal være
order by count(*) desc
Avatar billede poull Nybegynder
16. april 2003 - 00:12 #10
Jeg beklager at jeg ikke lige fik forklaret mine nye tabelnavne ordenlig :/

Grunden til at min query måske var lidt forkert var fordi at jeg sådan set ikke har brugt GROUP BY før da jeg ikke har haft brug for det. Nu jeg læst lidt om det og håber at jeg selv får det til at virke.

Tak
Avatar billede poull Nybegynder
16. april 2003 - 00:33 #11
Nu har jeg næsten fået det til at virke at den henter kategorinavnene og antal billeder der til.

select cats.category, count(*)
from cats, catsjoin
where cats.id = catsjoin.catid
group by cats.category
order by cats.id

Her til skal siges at cats er tabellen som indeholder kategorierne
cats.category er selve teksten for kategorien
cats.id er id'et for hver kategori
catsjoin.catid er henvisningen til den kategori id'en

Det som jeg så blot ikke kan få til at virke er at bruge count(*) frem for cats.id

Gør jeg noget forkert?
Avatar billede lap Nybegynder
16. april 2003 - 15:19 #12
Du sorterer på data, som ikke udtrækkes?

Order by er en sortering - og du kan naturligvis ikke sortere på noget, som ikke udtrækkes - hvis du ønsker at sortere på en id (normalt ikke), så skal du tilføje cats.id til både select og group by.
Avatar billede poull Nybegynder
16. april 2003 - 15:42 #13
Jeg er godt klar over at min sortering efter id ikke har nogen funktionalitet ud over at jeg kan se at sorteringen virker. Men kan det passe at jeg ikke bare kan skrive count(*) i stedet cats.id (som blot var med for at vise at det virkede) ?
Avatar billede lap Nybegynder
16. april 2003 - 19:32 #14
Jeg er ikke klar over, hvor du vil skrive count(*) - hvad mener du?
Avatar billede poull Nybegynder
16. april 2003 - 22:18 #15
Jeg ønsker jo at sortere efter hvor mange billeder er hører til hver kategory og derfor skrev du også i et tidligere svar:
order by count(*) desc;

og det er blot det som jeg prøvede at få med ind i min query :)
Avatar billede webster Nybegynder
29. april 2003 - 18:14 #16
select kategorier.kategorinavn, count(*) as antal
from kategorier, referencer
where kategorier.id = referencer.kategori_id
group by kategorier.kategorinavn
order by antal desc;
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