Avatar billede sho Nybegynder
25. februar 2011 - 10:44 Der er 5 kommentarer og
1 løsning

JOIN med LIKE i stedet for =

Hej eksperter,

spørgsmålet er nok stillet en del gange før, men jeg kan altså ikke knække syntaksen, så jeg er nødt til at bede om hjælp. Jeg ved ikke helt, om det hører hjemme i databaser eller asp, så bær over med mig - jeg skal bruge det på en asp-side :-)

Jeg har to tabeller i en database. Én med en liste over keywords, der har auto-ID, og én med indlæg, der kan have ét eller flere keywords tilknyttet.

Tabel_keywords:
1 : Badeferie
2 : Hjem
3 : Computer
4 : Flagstang
osv.

Tabel_indlæg:
Indlæg_1 : 1,2
Indlæg_2 : 2,3
Indlæg_3 : 1,10

Jeg vil gerne have en distinct liste over alle de keywords, der er tilknyttet som første keyword på indlæg. I ovenstående eksempel skal listen altså være Badeferie og Hjem, fordi 1 og 2 er de eneste, der er første keyword på et indlæg.

Hvordan skal den lige skæres?

Mit eget bud - i pseuokode - er noget i retning af:

SELECT DISTINCT * FROM tabel1 LEFT JOIN tabel2 ON KeywordID LIKE IndlægID + '%'

-Søren
Avatar billede webroot Nybegynder
25. februar 2011 - 11:08 #1
Jeg kan ikke lige gennemskue hvorfor du vil bruge like til at finde et Id. Men du skal huske at angive hvilken tabel den pågældende kolon du ønsker at søge i er i f.eks.

...JOIN tabel2 ON tabel1.KeywordID LIKE IndlægID + '%'
Avatar billede sho Nybegynder
25. februar 2011 - 11:21 #2
Det var også bare pseudokode :-)

Jeg tænkte LIKE, fordi jeg vil finde et specifikt Keyword i en liste af keywords, så jeg kan jo ikke bare sammeligne kolonnerne i de to tabeller.

Hvis der er en anden måde, der fungerer bedre, så er jeg modtagelig for forslag!
Avatar billede emfr08ab Nybegynder
25. februar 2011 - 15:32 #3
Hvis jeg forstår det korrekt, så er der en mange-til-mange relation. Et indlæg kan have mange keywords, mens et keyword kan være relateret til mange indlæg.

Dit problem opstår vel, da du sætter keyword-id'en i en kolonne, selvom der kan være flere tilknyttet.

Hvorfor opretter du ikke i stedet en ny tabel. Altså du har:

- En tabel med indlæg, samt id
- En tabel med keywords samt id
- En tabel der kobler dem sammen

Hvis badeferie skal sættes på første indlæg, så oprettes en ny post i sidste tabel, der indeholder begge id'er. Det gøres så for alle.
Avatar billede emfr08ab Nybegynder
25. februar 2011 - 15:37 #4
Så dit eksempel med tabellerne vil se således ud:

Tabel_keywords:
1 : Badeferie
2 : Hjem
3 : Computer
4 : Flagstang
osv.

Tabel_indlæg:
Indlæg_1
Indlæg_2
Indlæg_3

Tabel_?
1 : 2 : Dato
2 : 3 : Dato
1 : 10 : Dato


Hvis du så skal hente den første til hver, så kan du tilføje en dato.
Avatar billede sho Nybegynder
25. februar 2011 - 20:24 #5
Tja, hvorfor gøre det sværere end det er - ofte ligger den nemmeste løsning lige for!

Og i stedet for dato, kan jeg bruge auto-ID. Det laveste nummer er altid ældst.

Jeg takker - og lukker! ;-)
Avatar billede emfr08ab Nybegynder
25. februar 2011 - 20:42 #6
Det var så lidt :)
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
Kurser inden for grundlæggende programmering

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