Avatar billede Slettet bruger
10. marts 2005 - 15:05 Der er 23 kommentarer og
1 løsning

Reg exp i mysql query

Jeg har en tabel i min mysql database hvor der er forskellige værdier. I nogle tilfælde står der "2/60/90/50" og i andre står der kun "5". dvs at hvis der er flere værdier bliver de adskildt af "/".

I min select siger jeg .."tabel.kolonne LIKE '%$vaerdi%'".. hvilket virker rimelig godt. Det eneste problem er bare, at hvis $vaerdi er lig "2" bliver "26" og "62" også medtaget, kan det lade sig gøre at lave en reg exp der undgår dette problem?
Avatar billede Slettet bruger
10. marts 2005 - 21:00 #1
Er der mulighed for at lave dette?
Jeg sætter gerne point op hvis det er nødvendigt for at få en løsning
Avatar billede roenving Novice
11. marts 2005 - 11:19 #2
-- du kan kun gøre det, at du efter forespørgslen tester om værdierne i virkeligheden opfylder betingelsen, for mig bekendt findes der ikke noget, som kan gøre det i selve sql-delen !-)
Avatar billede Slettet bruger
11. marts 2005 - 19:04 #3
okay. Vil det ikke tage betydelig længere tid på denne måde?
Avatar billede roenving Novice
11. marts 2005 - 23:48 #4
Næh, for du kan jo bare teste dine quey-resulateter simpelt, så selvfølgelig vil det kræve noget servertid at gøre det, men jeg kan ikke forestille mig at det kan have nogen alvorlig betydning, medmindre du har millioner af transaktioner ...
Avatar billede Slettet bruger
12. marts 2005 - 13:13 #5
Har jeg overhovedet ikke.
Har du nogen ídé om hvordan en reg exp. der kan gøre det ovenstående kunne se ud?
Avatar billede roenving Novice
12. marts 2005 - 13:20 #6
Hvilket sprog bruger du ?-)

Men f.eks.

"^" + %$vaerdi% + "$|\/" + %$vaerdi% + "\/|^" + %$vaerdi% + "\/|\/" + %$vaerdi% + "$"

-- altså enten skal værdien stå alene, stå mellem to slashes eller være det første eller sidste element i en liste ...
Avatar billede roenving Novice
12. marts 2005 - 13:20 #7
Hrm, der skal dobbelte escapes på i den situation:

"^" + %$vaerdi% + "$|\\/" + %$vaerdi% + "\\/|^" + %$vaerdi% + "\\/|\\/" + %$vaerdi% + "$"
Avatar billede Slettet bruger
12. marts 2005 - 13:57 #8
ahh det glemte jeg lige: jeg bruger php med min mysql database
Avatar billede Slettet bruger
12. marts 2005 - 13:58 #9
skal jeg så stadig bruge den samme reg exp. "streng" som du har skrevet ovenfor?
Avatar billede roenving Novice
12. marts 2005 - 14:01 #10
Du skal selvfølgelig erstatte vaerdi med den variabel, hvori du opbevarer værdien, men ellers tror jeg, at du kan skabe et nyt regexp-objekt med ovenstående, som så skal præstere et match ...
Avatar billede Slettet bruger
12. marts 2005 - 14:57 #11
ok.. jeg er _meget_ grøn indenfor reg exp. jeg kommer lige med et foreslag til hvordan det kunne se ud :-)
Avatar billede Slettet bruger
12. marts 2005 - 15:01 #12
<?
$query = mysql_query("SELECT * FROM tabel");
while($row = mysql_fetch_array($query))
    {
    $vaerdi = $_POST['vaerdi'];
    if(preg_match("^" + %$vaerdi% + "$|\\/" + %$vaerdi% + "\\/|^" + %$vaerdi% + "\\/|\\/" + %$vaerdi% + "$", $row['kolonne_hvori_vaerdien_skal_findes']))
        {
        echo $row['kolonne_hvori_vaerdien_skal_findes'];
        }
    }
?>
Avatar billede roenving Novice
12. marts 2005 - 15:05 #13
-- du skal selvfølgelig fjerne %-tegnene, ellers tror jeg, det skulle virke (det ville i hvert fald i den tilsvarende javascript-ting !-)
Avatar billede Slettet bruger
12. marts 2005 - 15:18 #14
skal jeg fjerne % om variablerne?
Avatar billede Slettet bruger
12. marts 2005 - 22:33 #15
jeg kan slet ikke få det til at virke :)

jeg tror lige jeg ser i mysql eller php kategorien :o)
Avatar billede Slettet bruger
12. marts 2005 - 23:00 #16
smid svar tak roenving, jeg har selv lige fixet det - jeg tror lige at jeg har lært en del reg exp :)

brugte: '^$vaerdi\/.*|.*\/$vaerdi\/.*|.*\/$vaerdi$|^$vaerdi$'
Avatar billede roenving Novice
13. marts 2005 - 10:05 #17
Jamen så velbekomme '-)
Avatar billede roenving Novice
13. marts 2005 - 10:51 #18
-- og tak for point ;~}
Avatar billede Slettet bruger
13. marts 2005 - 10:57 #19
Velbekomme da :o)
Avatar billede Slettet bruger
13. marts 2005 - 10:57 #20
Hvorfor ville du egentlig dobbeltescape den?
Avatar billede roenving Novice
13. marts 2005 - 11:06 #21
Fordi jeg tænkte i, at det først blev sat ind i en streng-variabel !-)
Avatar billede Slettet bruger
13. marts 2005 - 11:28 #22
nåh oki. Så du regnede med at alle tegnene allerede var escapet i strengen? (prøver at lære noget her :o))
Avatar billede roenving Novice
13. marts 2005 - 12:01 #23
Godt nok javascript, men det illustrerer meget godt effekten:

Prøv

alert("\\"");

-- som gerne skulle give en fejl

alert("\"");

alert("\\*");

-- skulle derimod gerne give hhv. " og \* i alert-boksen ...
Avatar billede Slettet bruger
13. marts 2005 - 12:15 #24
jaja jeg kender godt alt det med escape osv. jeg har da prøvet at skrive lidt kode før :o)
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