Avatar billede caturn Nybegynder
18. september 2007 - 17:40 Der er 16 kommentarer og
1 løsning

Tæl "hits"

Hej!

Jeg har lavet et lille søgesystem i MySQL som søger nogle kolonner igennem efter et søgeord. Hvis søgeordet foreksempel er "harry potter" vil jeg gerne have at resultater hvor både harry og potter indgår kommer først.
Hvordan får tæller jeg hvilken række i tabellen, der har givet flest resultater?
Avatar billede editone Nybegynder
18. september 2007 - 17:50 #1
ved at lave en database over søgehits..
Avatar billede caturn Nybegynder
18. september 2007 - 18:05 #2
Det må du gerne uddybe.
Avatar billede editone Nybegynder
18. september 2007 - 18:21 #3
Du bliver nødt til at lave et sql statement som smider ind i en database at under søgningen på harrypotter er der x antal hits
Du skal jo registrer på en eller anden måde hvor mange gange der er blevet spurgt i databasen...
Avatar billede nielle Nybegynder
18. september 2007 - 18:22 #4
Avatar billede nielle Nybegynder
18. september 2007 - 18:27 #5
Måske noget i denne stil:

SELECT ditFelt, MATCH (ditFelt) AGAINST ('Harry Potter') AS relevans
FROM dinTabel
ORDER BY relevans DESC
Avatar billede caturn Nybegynder
23. september 2007 - 14:49 #6
Kan du forklare hvad der foregår i ovenstående?
Avatar billede nielle Nybegynder
23. september 2007 - 17:20 #7
Det er ellers beskrevet i linket. Viirker det da ikke?
Avatar billede caturn Nybegynder
24. september 2007 - 22:37 #8
Jeg har en PHP-kode, der ser sådan ud:

$term = strtoupper(preg_replace('/\s+/', '|', trim($_POST['term'])));
$regexp = "REGEXP '[[:<:]]($term)[[:>:]]'";
$result = mysql_query("SELECT * FROM article WHERE (UPPER(title) $regexp OR UPPER(abstract) $regexp OR UPPER(keywords) $regexp OR UPPER(author) $regexp) AND article.public = '1'", $db);

Her ville jeg så gerne kunne tælle søgehits. Kan jeg indsætte noget i den forespørgsel så det virker?
Avatar billede nielle Nybegynder
24. september 2007 - 22:43 #9
Nej, MySQL giver ikke oplysninger om hvormange ord der passer på dine regexp.

I den kode jeg gav, får du heller ikke antal hits,men du får sorteret søgeresultaterne efter hvilk der er mest relevante først - dvs. dem som hitter på flest af ordene.
Avatar billede nielle Nybegynder
24. september 2007 - 22:47 #10
Hvis du vil have hitsene, er du nødt til at tælle dem op i din PHP kode. Og så er det jo en fordel at have de mest relevante øverste sådan at man ikke også skal igang med at sortere i PHP-koden.
Avatar billede caturn Nybegynder
25. september 2007 - 12:39 #11
Ok, kan du fortælle mig hvad AS gør? Har jeg svært ved at finde ud af ud fra linket.
Avatar billede nielle Nybegynder
25. september 2007 - 17:35 #12
AS definere et såkaldt alias. Del-ledet:

MATCH (ditFelt) AGAINST ('Harry Potter')

- levere et tal, og dette bliver så kendt under aliaset "relevans". Du kan efterfølgende udtrække det ved noget i stil med $row["relevans"] hvis du ønsker

Det vigtigste er dog ikke om du kan udtrække relevansen (selv om det f.eks. giver dig mulighed for at sætte en rating på et hit), men at du med "... ORDER BY relevans DESC" får sorteret hitsen med den største relevans først.
Avatar billede caturn Nybegynder
28. september 2007 - 13:37 #13
Nu har jeg lavet en forespørgsel, som til dels virker:

SELECT *, MATCH (title, abstract, keywords, author) AGAINST ('$term') AS relevancy FROM article ORDER BY relevancy DESC

Når jeg så for eksempel søger på en forfatter (author) virker det nogengange. Der er for eksempel fire artikler. To skrevet af Christian, en af Thomas, og en af dem begge. Hvis man søger på Thomas får de to sidstnævnte en værdi i relevancy, men hvis man søger på Christian får ingen artikler nogen relevancy-værdi. Hvorfor det?
Avatar billede nielle Nybegynder
28. september 2007 - 22:43 #14
Uden at kende dine data mere eksakt er det lidt umuligt for mig at svare. :^|
Avatar billede nielle Nybegynder
06. oktober 2007 - 16:30 #15
??
Avatar billede caturn Nybegynder
07. oktober 2007 - 12:21 #16
Det var fordi størstedelen af artiklerne var skrevet af en Christian kendetegner søgeordet Christian ikke specielt rækkerne i tabellen.

Post et svar, nielle.
Avatar billede nielle Nybegynder
07. oktober 2007 - 12:24 #17
Svar :^)
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