Avatar billede finesmecker Nybegynder
30. maj 2009 - 00:12 Der er 5 kommentarer og
1 løsning

Ny kolonne med optælling

Hejsa Eksperter


Jeg er nybegynder med MySql så har brug for lidt hjælp.

Eksempel:

Jeg har en tabel med følgende

ID    HP    TEKST
1    aa.dk    bil,hus,penge,mad
2    bb.dk    hund,penge,cykel
3    cc.dk    mad,vovse,film

Jeg ønsker en ny kollonne der kan fortælle mig om ordene penge og mad findes i de forskellige tekster og hvormange gange. Altså således:

ID    HP    TEKST                          Penge-Mad
1    aa.dk    bil,hus,penge,mad          2
2    bb.dk    hund,penge,cykel            1
3    cc.dk    mad,vovse,film                  1
 
Jeg kan kun lave så jeg får dette resultat med 2 kolonner istedet for 1.
Anvender noget lignende

Case
When tekst like 'penge' then 1 else 0
End as 'penge'

ID    HP    TEKST                              Penge    Mad
1    aa.dk    bil,hus,penge,mad              1      1
2    bb.dk    hund,penge,cykel                1        0
3    cc.dk    mad,vovse,film                      0      1


Det skulle gerne kunne fungere sådan at jeg f.eks. kunne bruge 10 søgeord hvorfor min egen idé med at bruge AND f.eks. penge AND mad then 2 vil gøre det noget tidskrævende med alle de kombinitationer der ville være.

Nogle der kan hjælpe?
Avatar billede acore Ekspert
30. maj 2009 - 00:43 #1
Du kan bruge:

if(locate('mad', user_name), 1, 0) + if(locate('penge', user_name), 1, 0) AS antal

Alternativt (og noget smartere, synes jeg), kunne du lægge de mulige søgeord enkeltvis i en anden tabel (ordtabel) og bruge

SELECT tt.*, COUNT(ord) as antal FROM tabel as tt
LEFT JOIN ordtabel AS to ON IF (LOCATE(to.ord, tt.tekst) > 0, TRUE, FALSE)
GROUP BY id

Den sidste er ikke testet, men princippet bør være ok.
Avatar billede finesmecker Nybegynder
30. maj 2009 - 10:14 #2
Okay det vil jeg prøve - kan ikke lige teste før mandag.

Lige et par spg.

Tror jeg vil bruge denne:
if(locate('mad', user_name), 1, 0) + if(locate('penge', user_name), 1, 0) AS antal

er user_name lig med min kolonne altså skal jeg skrive tekst der i mit eksempel?

Er det muligt at lave flere efter hinanden hvis nu det var forskellige katogogrier.?

Eksempel:

if(locate('mad', user_name), 1, 0) + if(locate('penge', user_name), 1, 0) AS Pengmad
if(locate('hund', user_name), 1, 0) + if(locate('kat', user_name), 1, 0) AS Hundkat
Avatar billede finesmecker Nybegynder
30. maj 2009 - 10:44 #3
Lige en ekstra ting såfremt du ved det...
Hvis nu der i min kolonne med hjemmesider er følgende:

HP
aa.dk
aa.dk/side1
aa.dk/side2/kontakt
bb.dk
cc.dk
cc.dk/ommig

er det så muligt med ovenstående at få et output hvor man alene får f.eks. aa.dk ud men med alle antal af forekomne ord også under aa.dk/side1 og aa.dk/side2/kontakt. Altså i samme query som den der if(locate(´mad....)
Avatar billede acore Ekspert
30. maj 2009 - 10:50 #4
user_name skal udskiftet med dit feltnavn.

Du kan lave lige så mange, du orker. Du kan have flere IF's, fx Hund, Kat, Hest, Æsel med plus imellem. Og du kan have flere felter.

Ja, det du kan godt lade sig gøre. Du skal bruge en tekst-funktion til at gruppere efter.

Men jeg synes også du skal overveje, om du kompenserer for et uhensigtsmæssigt database-design med besværlig kode.
Avatar billede finesmecker Nybegynder
30. maj 2009 - 15:29 #5
1000 tak for hjælpen.. jeg vil prøve om det virker.

forstod ikke lige det med gruppering efter tekst funktion men bare det andet virker er det fint.
Avatar billede acore Ekspert
30. maj 2009 - 20:14 #6
Ellers må du vende tilbage
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