15. april 2003 - 20:11Der 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?
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?
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.
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.
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
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.
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) ?
select kategorier.kategorinavn, count(*) as antal from kategorier, referencer where kategorier.id = referencer.kategori_id group by kategorier.kategorinavn order by antal desc;
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.