WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hjälp med reguljärt i MySQL (https://www.wn.se/forum/showthread.php?t=25523)

boena 2007-12-07 12:03

Hej,

Behöver hjälp med ett reguljärt uttryck som jag inte får att fungera. Mitt mål är att hämta alla domän som börjar på x men inte xn--.

Följande hämtar alla domän på X:
Kod:

SELECT domain FROM domains WHERE domain REGEXP '^x'
Följande skulle man tro hämtar alla på x utom xn-- men den fungerar inte:
Kod:

SELECT domain FROM domains WHERE domain REGEXP '^x' AND WHERE domain NOT REGEXP '^xn--'
Någon som vet vad som måste göras?

mackan_the_man 2007-12-07 12:41

måste regex användas?

om inte kan du väl göra så här:
Kod:

SELECT domain FROM domains WHERE LEFT(domain, 1) = 'x' AND LEFT(domain, 4) != 'xn--';

goose 2007-12-07 12:41

kan inte mysqls skumrask-syntax, men det ser ut som du har ett WHERE för mycket i det andra codeblocket.

boena 2007-12-07 14:00

Tack Mackan kunde använda mig av LEFT faktiskt.

Såhär blev den slutgiltiga versionen:

Kod:

SELECT domain FROM domains WHERE domain REGEXP '^x' AND LEFT(domain, 4) != 'xn--'
Har faktiskt aldrig använt mig av LEFT innan ;)

martine 2007-12-08 11:06

REGEXP är ganska resurskrävande och gör att index inte kan användas (vilket kanske även gäller LEFT() beroende på hur klokt MySQL är).

Kod:

WHERE domain LIKE 'x%' AND domain NOT LIKE 'xn--%'
Borde väl fungera? (Och då kan index användas om du har indexerat domain)

boena 2007-12-08 12:00

martine - Har testat den tidigare men då fungerade det inte. Ska prova igen senare för att se att det inte bara var ett syntaxfel.

martine 2007-12-08 15:02

Citat:

Originally posted by boena@Dec 8 2007, 13:00
martine - Har testat den tidigare men då fungerade det inte. Ska prova igen senare för att se att det inte bara var ett syntaxfel.
Eftersom det antagligen är väldigt få xn-- så kan du ju också sortera ut dem efteråt:

Kod:

WHERE domain LIKE 'x%' HAVING domain NOT LIKE 'xn--%'
Eller liknande med LEFT() eller vad du föredrar - blir nog ännu snabbare (om du är ute efter effektivitet).


Alla tider är GMT +2. Klockan är nu 23:32.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson