Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] odwrtoność dla REGEXP (nie pasujące do wzorca)
seeb
post 3.04.2012, 19:24:55
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.12.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Czy istnieje jakaś odwrotność dla tej komendy (REGEXP) w myslq? Coś w stylu !="cos";


  1. SELECT u.id, u.name AS imie_i_nazwisko, p.Ulica, p.Nr_domu, p.Nr_lokalu, p.Kod_pocztowy, p.Miejscowosc, p.Poczta, p.nr_iban, p.nazwisko_iban, p.adres_iban
  2. FROM jos_users AS u
  3. LEFT JOIN jos_jobsys_pracownicy AS p ON u.id = p.id
  4. WHERE p.id >0
  5. AND p.nr_iban
  6. REGEXP '^PL.{2}1090'
  7. ORDER BY u.id

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Niktoś
post 3.04.2012, 19:57:04
Post #2





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Powinieneś dostosować właściwy wzorzec do polecenia REGEXP,a nie polecenie do wzorca.Na odczepnego można tak:
  1. SELECT u.id, u.name AS imie_i_nazwisko, p.Ulica, p.Nr_domu, p.Nr_lokalu, p.Kod_pocztowy, p.Miejscowosc, p.Poczta, p.nr_iban, p.nazwisko_iban, p.adres_iban
  2. FROM jos_users AS u
  3. LEFT JOIN jos_jobsys_pracownicy AS p ON u.id = p.id
  4. WHERE p.id >0
  5. AND p.nr_iban NOT
  6. REGEXP '^PL.{2}1090'
  7. ORDER BY u.id


Ten post edytował Niktoś 3.04.2012, 20:02:28
Go to the top of the page
+Quote Post
seeb
post 3.04.2012, 20:36:34
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.12.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Dziękuję zaraz sprawdzę.

Ale przyznasz, że wyszukiwanie wszystkich niewiadomych jest nieco trudniejsze niz wybranie wszystkich poza tymki które znamy.

Mam 2000 rekordów w tym 29 spełniających warunek "^PL.{2}1090" używam tego do wyodrębnienia kont bankowych w bzwbk (1090 to kod bzwbk) a potem pobieram wszystkie pozostałe.

Musiałbym i tak pobierać wszyskie po za tymi które pasują do powyższego. Oczywiście mogę się mylić.
Go to the top of the page
+Quote Post
Pilsener
post 3.04.2012, 23:01:01
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


A musi być wyrażenie regularne? Jaka jest struktura tego ciągu? Mamy XXI wiek, są funkcje które utną w mysql string zaokrąglając do słowa. Może da się to zrobić na stringach.
I z tego co pamiętam negować można tylko pojedyńcze znaki albo grupy znaków ujęte w nawiasy [].
I nie ma znaczenia dla wydajności ile rekordów spełnia warunek bo i tak porównane muszą zostać wszystkie. Ma znaczenie, jeśli warunków jest kilka - wtedy zmiana ich kolejności może mieć kolosalne znaczenie.
I jeśli ma być wydajnie i nie jest to jednorazowa operacja to dobrze jest dodać odpowiednią procedurę, która wydzieli nam ten BIC, IBAN czy co tam chcemy do oddzielnego pola które dodamy do indeksu.
Go to the top of the page
+Quote Post
seeb
post 3.04.2012, 23:53:34
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.12.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


PLXXYYYYNNNNAAAAAAAAAAAAAAAA

PL - kod kraju
XX - suma kontrolna
YYYY - Kod banku
NNNN - kod odziału
AA...A - to numer rachunku
nas interesuje żeby było w PL i żeby to był BZWBK (czyli to 1090)

XXYYYYNNNNAAAAAAAAAAAAAAAA to numer rachunku w formacie NRB (26 cyfr)
PLXXYYYYNNNNAAAAAAAAAAAAAAAA to numer rachunku w formacie IBAN (28 znaków)

Wyrażenie regularne których nie znoszę wydawało się być tu idealne. Co do oddzielnego pola to raczej opcja odpada
dziewczyny dopisują to ręczniea rozbicie jest większe ale tu najistotniejsze jest pobranie listy tych co są w BZWBK i pozostałych
Z tgego tworzone są paczki do przelewów pracowniczych, umów zleceń etc raz w miesiącu.

Ten post edytował seeb 3.04.2012, 23:57:16
Go to the top of the page
+Quote Post
d3ut3r
post 4.04.2012, 01:57:37
Post #6





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


Powinno zadziałać

Dla klientów bzwbk

  1. SELECT * FROM tabela WHERE konto LIKE "PL__1090%"


Dla pozostałych

  1. SELECT * FROM tabela WHERE konto NOT LIKE "PL__1090%"


można też spróbować zamiast 2 oddzielnych zapytań zrobić taki "myk"

  1. SELECT *, IF(konto LIKE "PL__1090%",1,0) AS czybzwbk FROM tabela


wówczas robisz jedno zapytanie, a w polu czybzwbk wyniku masz 1 - dla klientów, i 0 dla tych którzy nie są klientami tego banku.

Ten post edytował d3ut3r 4.04.2012, 02:04:48


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 18:34