25. februar 2011 - 10:44Der 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.
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 + '%'
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 + '%'
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.
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.