Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] odwrtoność dla REGEXP (nie pasujące do wzorca)
Forum PHP.pl > Forum > Bazy danych > MySQL
seeb
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

Niktoś
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
seeb
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ć.
Pilsener
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.
seeb
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.
d3ut3r
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.