Avatar billede nightcoder Nybegynder
14. december 2007 - 11:34 Der er 11 kommentarer og
1 løsning

Kryptisk query med regexp

Har et lille problem..

Har en variabel som jeg trækker ud fra min db. Den får så efterfølgende denne tur.

$var_mod = str_replace(' ', '-', $var);
$var_mod = strtolower($var_mod);
$var_mod = preg_replace("/[^a-z- 0-9]+/i", "", $var_mod);

Efterfølgende vil jeg gerne matche min nye variabel op med den oprindelige værdi fra databasen, har prøvet med følgende men har lidt problemer med min query.


$compare = str_replace('-', ' ', $var_mod);   
$indhold = mysql_query("SELECT * FROM tabel WHERE LCase(name) REGEXP '^a-z- 0-9' '".$compare."'");

Er ikke lige sikker på at REGEXP er den jeg skal have fat i, håber nogen kan hjælpe?
Avatar billede nielle Nybegynder
14. december 2007 - 19:50 #1
Den første kodeblok skal se sådan ud:

$var_mod = str_replace(' ', '-', $var);
$var_mod = strtolower($var_mod);
$var_mod = preg_replace("/[^a-z0-9-]/i", "", $var_mod);

Jeg kan ikke gennemskue hvad du forsøger at lave i SELECT'en. Kan du beskrive nogle af de data du bruger og hvad der skal ske med dem?
Avatar billede nightcoder Nybegynder
15. december 2007 - 09:46 #2
Lad os sige at jeg i min database har en celle med følgende navn "Jens Olsen's"

Nåe jeg så behandler ordet med de tre linjer ovenfor, skulle dette navn gerne blive til "jens-olsens"

Nu vil jeg så gerne matche navnet op i databasen, for at hive yderligere data ud af samme postering. Altså skal jeg have ordet ført tilbage til den oprindelige formatering.

til start kan jeg vende str_replace om, så når jeg frem til "jens olsens"

Ved at bruge Lcase i min query gør jeg feltet name lower case, så forskellen mellem ordet jeg har modificeret og det oprindelige er nu kuns ' før s i olsens.

Har så prøvet at fjerne alle tegn på nær a-z0-9- fra name med regexp, så ville min query nemlig matche det originale ord.

Håber du forstår.
Avatar billede nielle Nybegynder
15. december 2007 - 09:54 #3
Det får du et problem med at gøre...

Da du har "smidt" mindst en oplysning væk, nemlig '-tegnet vil du ikke umiddelbart kunne bruge en regex til at matche den gamle værdi med den nye.

Der er også et problem omkring '-'-tegnet. Navne i databasen kan sagtens indeholde '-'-tegn. Men de bliver jo omdannet til ' '-tegn inden du er tilbage igen og søge efter dem i databasen. Den går heller ikke umiddelbart.

Den er dog ikke helt umulig som den med '-tegnet (og de andre tegn som også bliver fjerner med den sidste preg_replace).
Avatar billede nielle Nybegynder
15. december 2007 - 10:04 #4
Men hvorfor ønsker du egentlig at smmenligne i databasen med den modificerede værdi i stedet for den originale?
Avatar billede nightcoder Nybegynder
15. december 2007 - 12:02 #5
Bruger den i forbindelse med noget mod rewrite, prøver at lave så søgemaskine venlig stier som muligt, og derfor får jeg brug for at kunne matche på den her måde, så undgår jeg nemlig at min url skal indeholde tal.

Har du et løsningsforslag så? :-)
Avatar billede nielle Nybegynder
15. december 2007 - 15:59 #6
Kan du give nogle eksempler på hvad det er du ønsker at kunne gøre?
Avatar billede nightcoder Nybegynder
16. december 2007 - 08:18 #7
Jamen i alt sin enkelthed ønsker jeg bara at kunne matche et ord op i databasen, efter den er blevet modificeret med:

$var_mod = str_replace(' ', '-', $var);
$var_mod = strtolower($var_mod);
$var_mod = preg_replace("/[^a-z0-9-]/i", "", $var_mod);

Alternativt hvis der er en anden måde at modificere mine ord på så de kan bruges i en url, og som er lettere at matche op.
Avatar billede nielle Nybegynder
16. december 2007 - 08:27 #8
Det kaaaaan vist godt gøres med en regexp ... men i så fald bliver det ikke en specielt effektiv løsning.

Hvad med i stedet at udvide din tabel med en ekstra kolonne som indeholder værdien af url'et som den ser ud efter at have været sendt igennem den er kodeblok. Så kan du bruge den kolonne til at finde væreirne med. Dette ville være langt den effektiveste løsning.
Avatar billede nielle Nybegynder
21. december 2007 - 08:15 #9
Har du fået tænkt over forslaget?
Avatar billede nielle Nybegynder
28. december 2007 - 21:37 #10
??
Avatar billede nightcoder Nybegynder
31. december 2007 - 09:28 #11
Beklager ventetiden, men har haft lidt meget at se til. Men har brugt dit forslag med den ekstra kolonne, så smid lige et svar :)
Avatar billede nielle Nybegynder
31. december 2007 - 09:34 #12
Svar :^)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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