Avatar billede aggie Nybegynder
17. september 2001 - 13:14 Der er 10 kommentarer og
1 løsning

Select/order/count ting?

Jeg har en tabel med artikler\'s keywords (til news etc), for at kunne finde relaterede artikler.

den er bygget som:

artikel_id (unique index), keyword

og så er det jo så, at jeg skal bruge alle artikel id\'s, på artikler der har keywords tilfælles med et givet artikel_id - ordnet efter antal sammenfald, så f.x. med:

Artikel_id:      keyword:
0001              internet
0001              hjælp
0001              ekspert

0002              internet
0002              nyheder
0002              php

0003              internet
0003              ekspert
0003              php

0004              sex
0004              online
0005              free

hvis jeg giver artikel_id 0003, så skal min select returnere (ordnet efter sammenfald) 0001, 0002, fordi der er 2 sammenfald med 0001 og et sammenfald med 0002, og ingen sammenfald med 0004...

jeg bruger postgresql, så der er ingen bøvl med subselects, men det behøver ikke være specielt rdbm-afhængigt, for jeg skal sikkert bruge det andre steder :)
Avatar billede nordclc Nybegynder
17. september 2001 - 13:29 #1
Jeg kender ikke postgresql, men det må være noget med (hvis jeg har forstået det rigtigt):

select artikel_id from tabel where keyword in (select keyword from tabel where artikel = 0003)

//Claus
Avatar billede coderdk Praktikant
17. september 2001 - 20:37 #2
Det ville jeg også sige...
Avatar billede aggie Nybegynder
18. september 2001 - 10:55 #3
ja, den del er ok, men hvorledes med antallet af \'hits\' på keywords?
Avatar billede nordclc Nybegynder
18. september 2001 - 12:05 #4
Jeg ved ikke om du kan få den oplysning i samme \"hug\", men du kan løse det med en ekstra forespørgsel:

select count(*) from tabel where keyword in (select keyword from tabel where artikel = 0003)

//Claus
Avatar billede aggie Nybegynder
18. september 2001 - 12:08 #5
du læser ikke hvad der står, ellers udtrykker jeg mig ikke klart nok...

Det drejer sig ikke om antallet af records der matcher i en eller anden grad, men en ORDER BY således at de records der matcher *flest keywords* kommer ud først..
Avatar billede nordclc Nybegynder
18. september 2001 - 13:48 #6
Ahhh, nej jeg læste vist ikke hvad der stod - beklager ;o). Jeg er altså stadig i tvivl med postgresql, men du kan prøve med denne (virker i Oracle SQL):

select count(keyword) as antal, artikel_id from tabel where keyword in (select keyword from tabel where artikel = 0003)group by artikel_id order by antal

//Claus

Avatar billede nordclc Nybegynder
18. september 2001 - 13:48 #7
Hovsa: order by antal DESC
Avatar billede aggie Nybegynder
18. september 2001 - 14:23 #8
hmm, nu ligner det noget... vil det ødelægge noget, hvis jeg udover GROUP BY hægter et DISTINCT på

SELECT COUNT(keyword) AS antal, DISTINCT artikel_id FROM... ?
Avatar billede nordclc Nybegynder
18. september 2001 - 14:29 #9
Jeg er desværre nødt til at køre, men jeg vender tilbage senere.

//Claus
Avatar billede nordclc Nybegynder
19. september 2001 - 09:01 #10
At tilføje DISTINCT skulle ikke ødelægge noget.

//Claus
Avatar billede nordclc Nybegynder
18. oktober 2001 - 10:00 #11
Tak for pointne ;o)

//Claus
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