Avatar billede wster Nybegynder
01. december 2008 - 15:17 Der 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?
Avatar billede mcgoat Nybegynder
01. december 2008 - 15:26 #1
du skal nok trække det hele ud og lave søgningen i PHP, noget ala:

$mystring1 = "jeg har 11 foo bar"

og så køre det her i en løkke hvor du henter ud fra DB
$pos1 = stripos($mystring1, $row[i]);

if ($pos1 === true) {
    echo $row[i] . " findes i min string";
}
Avatar billede wster Nybegynder
01. december 2008 - 16:01 #2
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.
Avatar billede wster Nybegynder
02. december 2008 - 02:06 #3
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.
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