Avatar billede straszek Praktikant
21. december 2007 - 20:06 Der er 25 kommentarer og
1 løsning

tilpasning af strenge

Er der nogen der kan hjælpe mig med at lave en kode der gør følgende:

jeg har en tekststreng der kan se ud som sådan: 5401-821-m eller 5401-821-xl - jeg vil gerne af strengen afkortet så den kun viser strengen 5401-821 - alstå så der slettes bagfra indtil først - er slettet

Håber det giver mening - ellers spørg :-)
Søren
Avatar billede erikjacobsen Ekspert
21. december 2007 - 20:10 #1
$s="5401-821-xl";
print preg_replace("/-[^-]*$/","",$s);
Avatar billede nielle Nybegynder
21. december 2007 - 20:12 #2
Brug strrpos() til at finde positionen af den sidste '-':

http://lv.php.net/manual/en/function.strrpos.php

Brug derefter substr() til at udtrække den del du ønsker at beholde:

http://lv.php.net/manual/en/function.substr.php
Avatar billede straszek Praktikant
21. december 2007 - 20:18 #3
super smukt - et ekstra spørgsmål: kan man integerere ovenstående direkte i en mysql-sætning

f.x
where  products_model = '$subid'

og så skulle  preg_replace("/-[^-]*$/","",$s); bliver "kørt" på products_model direkte i sql?
Avatar billede erikjacobsen Ekspert
21. december 2007 - 20:20 #4
Næh, hvorfor det? Gør det bare i PHP, inden du bruger værdien i din SQL-sætning.
Avatar billede straszek Praktikant
21. december 2007 - 20:23 #5
ja, med det er på værdien i sql jeg vil bruge funktionen så hvis jeg kunne køre funktionen kunne jeg spare et par arbejdsgange
Avatar billede erikjacobsen Ekspert
21. december 2007 - 20:30 #6
Hvorfor så spørge i PHP, og ikke nævne et ord om MySql?

Men jeg forstår ikke hvad du skal. Kan du forklare med et eksempel eller 3?
Avatar billede straszek Praktikant
21. december 2007 - 20:37 #7
Spørg i php fordi jeg vil bruge en php funktion i en mysql sætning...

I min mysql har jeg tabellen products og kolonnen products_model. products_model kan f.x. være 5401-821-m eller 5401-821-xl eller 5401-821-10.

i php (den er noget oscommerce shop halløj) har jeg variablen som jeg har kaldt "$subid" - denne hedder f.x 5401-821.

Nu er det så at jeg vil bruge din kode til at fjene det bagerste fra products_modelså den kan sammenlignes med $subid
Avatar billede nielle Nybegynder
21. december 2007 - 20:41 #8
Du kan desværre ikke bruge PHP funktioner i MySQL - der kan man kun bruge MySQL funktioner. Hvis du derfor ønsker at kunne gøre det rent i MySQL (i èn arbejdsgang som du siger) skal du hellere stille spørgsmål som dette under databaser, i MySQL kategorien.
Avatar billede straszek Praktikant
21. december 2007 - 20:44 #9
ok det vil jeg prøve
Avatar billede erikjacobsen Ekspert
21. december 2007 - 20:46 #10
Du skal nok noget i retning af

$subid=preg_replace....;    // "1111-111"
$sql=" ... feltnavn LIKE '$subid%' ..."
Avatar billede nielle Nybegynder
21. december 2007 - 20:55 #11
I ren MySQL kan det vist nok gøres sådan:

SELECT SUBSTRING(ditFelt, LENGTH(ditFelt) - LOCATE('-', REVERSE(ditFelt))) FROM dinTabel
Avatar billede straszek Praktikant
21. december 2007 - 21:26 #12
nej det går ikke det giver resultater i stil med 1-s 1-l osv
Avatar billede nielle Nybegynder
21. december 2007 - 21:33 #13
Det lyder lidt mærkeligt; hvordan ser din ud i det ekempel du har prøvet?
Avatar billede straszek Praktikant
21. december 2007 - 21:43 #14
SELECT SUBSTRING(  `products_model` , LENGTH(  `products_model` ) - LOCATE(  '-', REVERSE(  `products_model` ) ) )
FROM orders_products
LIMIT 0 , 30
Avatar billede nielle Nybegynder
21. december 2007 - 21:51 #15
Prøv denne i stedet:

SELECT SUBSTRING(products_model, 0, LENGTH(products_model) - LOCATE('-', REVERSE(products_model))) AS resultat
FROM orders_products
LIMIT 0, 30
Avatar billede straszek Praktikant
21. december 2007 - 21:56 #16
no go - resultatet bliver tomme strenge
Avatar billede nielle Nybegynder
21. december 2007 - 22:12 #17
Hmmmm...

SELECT SUBSTRING(products_model, 1, LENGTH(products_model) - LOCATE('-', REVERSE(products_model))) AS resultat
FROM orders_products
LIMIT 0, 30
Avatar billede straszek Praktikant
23. december 2007 - 10:50 #18
Nielle - det virker fint nu, smid et svar hvis du vil have point
Avatar billede nielle Nybegynder
23. december 2007 - 12:27 #19
Svar :^)
Avatar billede erikjacobsen Ekspert
23. december 2007 - 15:00 #20
Jeg vil tro det er alt for kompliceret til hvad der er brug for. Lad mig som jeg forstår problemstillingen:

I tabellen står der i et felt

products_model
111-1111-aa
111-1111-bb
111-1111-cc
111-1112-aaa
111-1113-cc

Og så er forespørgslen at få alle ud, der starter med "111-111".

Er det korrekt opfattet?
Avatar billede straszek Praktikant
23. december 2007 - 16:07 #21
jeps, helt korrekt
Avatar billede nielle Nybegynder
23. december 2007 - 16:20 #22
Hmmm? jeg har nu ellers forstået dit problem som at du gerne ville have dette her ud:

111-1111
111-1111
111-1111
111-1112
111-1113

og at du helst ville have det i så få linjer kode som overhovedet muligt?
Avatar billede straszek Praktikant
23. december 2007 - 16:38 #23
ja, det er jo også præcist det som erikjacobsen forslår....
Avatar billede erikjacobsen Ekspert
23. december 2007 - 17:19 #24
Så vil jeg anbefale skitsen fra 21/12-2007 20:46:45. Ved at bruge en LIKE med % i halen, er er en chance for at MySql (ik'?) kan udnytte et index på feltet.
Avatar billede nielle Nybegynder
23. december 2007 - 17:30 #25
> Og så er forespørgslen at få alle ud, der starter med "111-111".

Ok, ja jeg kan se at jeg skal tælle hvor mange tegn der er med.

Men hvis du nu havde sådan noget som:

133-1113-cc

i basen, skulle du så ikke have denne med ud?

133-1113
Avatar billede nielle Nybegynder
23. december 2007 - 17:33 #26
Bortset fra det så synes jeg ikke at der skelnes til om det er:

111-1112-aaa

eller

111-1112

du skal have ud? Så vidt jeg forstod, var det den sidste. Det er ihvertfald det min løsning går ud på.
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