Avatar billede zurekk Nybegynder
26. april 2007 - 16:05 Der er 10 kommentarer og
1 løsning

popular tags

Hej eksperter,

Jeg kommer til at have en masse rækker i min sql tabel, som hver har et felt der kommer til at indeholde 3 tags, fordelt sådan her tag1,tag2,tag3(eller anderledes hvis nemmere.

Det jeg gerne vil have lavet er et script som gør at jeg ud fra alle rækkerne skal kunne hive de 10 mest skrevne tags ud.

Dvs.

hej,prut,lort
sut,kurt,prut
prut,hej,kat
kat,prut,hej

vil se sådan her ud:
prut, hej, kat

På forhånd tak!
Avatar billede j4k0b Nybegynder
26. april 2007 - 21:15 #1
Umiddelbart vil jeg sige at hvert ord skal have sin egen række.. Det gør det i hvert fald en del nemmere og hurtigere at trække en topliste ud fra databasen.

feks:

SELECT tag, COUNT(tag) as amount FROM tabel GROUP BY tag ORDER BY amount DESC LIMIT 10

..eller noget i den stil :-)
Avatar billede jakobdo Ekspert
26. april 2007 - 21:18 #2
Jeg ville kode det en smule anderledes! :o)

table (det du nu måtte gemme)
id, navn

tag_table (tabel til tags)
id, tag (id auto_increment, tag = unique)

tag_til_hvad_der_nu_gemmes
tag_id, ting_id

Så kan du lave sql udtræk, som trække de rækker ud, som har flest antal af en given tag.
Avatar billede zurekk Nybegynder
26. april 2007 - 21:31 #3
Well, der er også andre ting i samme table, og det er ret vigtigt at tagsne forbliver i samme, da det ellers kommer til at tage for meget sql plads hvis mange kommer til at bruge siden.

Tags'ene kommer nemlig til at blive brugt meget.. rigtig meget.

Så er der ikke en måde man kan smide alle tags i et array, og så plusse hver gang den finder en til.
Og i sidste ende hente dem ud som der var flest af?
Avatar billede jakobdo Ekspert
26. april 2007 - 21:46 #4
Ved du gemmer tags som du ønsker,
så gemmer du:
ting1 - sjov, spas, kodning
ting2 - sjov, noget, andet
ting3 - sjov, hmm, wow

Det vil sige du lige pludselig har gemt ordet sjov 3 gange i databasen!
På min måde ville det blive:

ting1 - 1
ting2 - 2
ting3 - 3

tags:
1 - sjov
2 - kodning
3 - spas
4 - noget
5 - andet

tags_ting
1 - 1
1 - 2
1 - 3
2 - 1
3 - 1

Det betyder du gemmer kun teksten 1 sted.
Avatar billede zurekk Nybegynder
27. april 2007 - 17:00 #5
Nå ja, misforstod :D

Dog skal de 3 tags vises med hvert indlæg.
Det er derfor vigtigt at de gemt sammen.
Avatar billede jakobdo Ekspert
27. april 2007 - 20:51 #6
Det kan du også sagtens gøre!
Så skal du lave noget:
SELECT ting.*, tags.navn
FROM ting
INNER JOIN tags_ting
ON ting.id = tags_ting.ting_id
INNER JOIN tags
ON tags.id tags_ting.tags_id
WHERE ting.id = 1 <--- Den ting du vil trække ud fra databasen.
Avatar billede zurekk Nybegynder
27. april 2007 - 22:59 #7
Kan ikke rigtig se hvordan det der virker =/
Avatar billede jakobdo Ekspert
27. april 2007 - 23:03 #8
Nej, men den kan bruges når tabellen er bygget op!
En dag vil du forstå den. :o)
Avatar billede zurekk Nybegynder
01. maj 2007 - 13:18 #9
Well, du smider bare et svar =)
Avatar billede jakobdo Ekspert
01. maj 2007 - 13:48 #10
Svar!
Avatar billede jakobdo Ekspert
01. maj 2007 - 18:25 #11
Takker for point.

Forstod du hvordan det virkede, eller lukker du bare for at lukke spørgmålet?
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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