01. december 2008 - 15:17Der er
2 kommentarer og 1 løsning
Select rows hvor text er en substring af input
Hej, jeg er rimeligt ny til SQL og MySQL specifikt. Jeg er stødt på et problem hvor jeg har et table, som blandt andet indeholder en varchar. Jeg har brug for at få fat i alle de sætninger, som er delsætninger af en sætning jeg vælger.
Lad os eksempelvis sige at jeg har følgende table:
a_id a_text 0 jeg har 1 har 12 foo 2 foo bar 3 jeg har 11 4 bar 5 jeg mener 6 11 bar foo
og min text er: "jeg har 11 foo bar". Så skal jeg bruge alle de a_id hvor a_text indgår i sætningen. dvs.
0 2 3 4
Hvordan skal mit query se ud for at det kan lade sig gøre?
Det er ikke til en hjemmeside og det er ikke i php. Men hvis jeg skal have det hele ud, har jeg slet ikke nogen glæde af at have det i en database. Det drejer sig om et projekt der potentielt kan vokse til nogle hundrede rows i det table, derfor finder jeg det alt for tungt at trække det hele ud, for derefter at gennemgå det.
Jeg har søgt længe men nu har jeg endelig fundet løsningen! MySQL har en kommando der hedder INSTR (in string), som returnerer hvilken placering en string har i en anden string. Eksempelvis: SELECT INSTR('foobarbar', 'bar') returnerer 4, fordi bar findes i foobarbar fra 4. tegn. Det smarte er så at INSTR returnerer 0 hvis stringen ikke indeholder den anden string Eksempelvis SELECT INSTR('xbar', 'foobar')
Derfor kan jeg bygge mit query som SELECT id FROM [mit table] WHERE INSTR('jeg har 11 foo bar', [navn på min text column]) <> 0. I alle de tilfælde hvor INSTR IKKE returnerer 0 gælder det at indholdet i text column er en substring af min sætning.
Synes godt om
Ny brugerNybegynder
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.