![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 38 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
MariaDB to system oparty na mysql'u, jednak ich wyrażenia regularne oparte są na PCRE a w MySQL'u na POSIXIE . Więcej na: https://mariadb.atlassian.net/browse/MDEV-7127. Chciałbym utworzyć zapytanie korzystające z REGEXP, które będzie działało na tych dwóch systemach bazodanowych. Mam teraz z grubsza coś takiego:
Jednak na MySQL dostaję błąd "SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'repetition-operator operand invalid' from regexp' ". Wcześniej w tym zapytaniu zamiast szesnastkowych reprezentacji znaków (\\x{20} oznacza np. spację; więcej tutaj) używałem character setów czyli, np.
ale to z kolei powodowało na MariaDB błąd "POSIX collating elements are not supported". Jak z pierwszego zapytania usunę operatory powtórzeń, czyli w tym przypadku jeden {1} to nie ma błędu. Ktoś ma jakiś pomysł jak używać takich wyrażeń żeby działało na MySQL oraz MariaDB? Dodam że potrzebuję obsługi następujących znaków:
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
A nie możesz poprzedzić znak specjalny po prostu \\ ?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 38 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
To jest część większego modułu wyszukiwania zaawansowanego, który został kiedyś przez inną osobę napisany ( albo nawet kilka osób ) (IMG:style_emoticons/default/sad.gif) Czyli @Crozin niestety nie mogę użyć takiego zapytania, nie mogę również używać znaków ucieczki, bo skrypt padnie w innym miejscu... Ostatecznie może nie obejdzie się bez przebudowy i większych zmian w tym module, ale jeśli to możliwe chciałbym tego uniknąć.
Ten post edytował kaem 7.08.2015, 09:31:09 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Podpowiedź: wyszukiwarka oparta o zwykłego RegExpa w bazie danych jest słabym narzędziem, zarówno wydajnościowo jak i jakościowo. Zainteresuj się narzędziami typu Solr o ile masz taką możliwość/chęć.
Cytat nie mogę również używać znaków ucieczki, bo skrypt padnie w innym miejscu... To wygląda na błąd, który należy w pierwszej kolejności poprawić. Co i dlaczego miałoby się wysypać?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Popieram, to że znak ucieczki wysypie Ci system to jest poważny błąd. Nie wiemy nic o systemie na którym pracujesz ale to nie powinno mieć miejsca.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 38 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Z grubsza wygląda to tak, że mamy wyszukiwarkę, w której możemy używać znaków specjalnych sterujących wyszukiwaniem, takich jak np. *,+,-,",( i kilka innych. Np. wpisanie "ALA-MA" spowoduje znalezienie firm które mają w nazwie "ALA" ale nie mają "MA". Jeśli chcemy firmę "ALA-MA" to musimy wpisać "ALA\-MA" itd. itp. Skrypt to wszystko mieli, podmienia, dalej mili, znowu coś podmienia i tak dalej (IMG:style_emoticons/default/smile.gif) , np malutki wycinek:
i jest tego więcej (jak widać po ereg_replace skrypt ma już parę lat). Dlatego zależy mi żeby to co miałem wcześniej i działało na mysql, czyli działało również na mariaDB, dlatego próbowałem z ale gdy w wyrażeniu pojawia się operator potworzenia {JAKAŚLICZBA} to na MySQL się z kolei wywala. Oczywiście ostatecznie może się okazać, że konieczne będą zmiany/poprawki, ale na razie staram się to zrobić jak najmniejszym kosztem. @Crozin dzięki, z chęcią zainteresuje się tym narzędziem. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
najmniejszym kosztem to jest postawić serwer MySQL tu, albo MariaDB tam (zależy pod co masz napisany system)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.09.2025 - 12:26 |