Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne generowane przez php dla bazy MySQL
Forum PHP.pl > Forum > PHP
elmozaur
Witajcie.
Glowie sie nad tym problemem od jakiegos czasu i nie wiem jak to wymyslic. Chcialbym dodac nowa funkcjonalnosc do swojej strony, ktora polegala by na nadawaniu cech indywidualnych newsom lub tresci. Na poczatek wymyslilem ze cechy bede zapisywal binarnie w formacie 5 znakow (0 lub 1).Strona jest o dzielach sztuki a cechy zapisuje tak:
cecha_malarz=10000, cecha_grafik=01000, cecha_fotograf=00100, cecha_malarz_grafik=11000, cecha_wszystko=11100. Taka cecha zapisywana jest razem z newsem dla ulatwienia wyszukiwania.

I teraz moje pytanie:
jak zadac pytanie do bazy (mysle ze za pomoca wyrazenia regularnego) ktore bedzie poprawnie interpretowalo takie cechy.Np jesli dam pytanie o newsy ktore spelniaja cechy malarstwa (10000) to chcialbym otrzymac w wyniku zarowno malarza(10000) jak rowniez malarza_grafika(11000) i wszystko(11100).

Domyslam sie ze chodzi o jakies przerobienie zapisu 10000 na cos takiego : na pozycji pierwszen ma byc jedynka a na pozostalych obojetnie co.
lub w przypadku 00110 : na pozycji trzeciej i czwartej musi byc 1 a na pozostalych obojetnie

tylko jak to zapisac wyrazeniem regularnym ?

za kazda podpowiedz dziekuje i pozdrawiam
G
nospor
Pomysl miales dobry ale z wykonaniem przekombinowales.
Owszem, mają to byc zapisy binarne ale nie jako cyferki 01 ale jako bity.

malarz - 1 bitowo to bedzie: 001
grafik - 2 bitowo to bedzie: 010
fotograf - 4 bitowo to bedzie: 100

no i teraz laczenie bitowe or:
malarz grafik 1 | 2 = 3 bitowo to bedzie: 011
grafik fotograf 2 | 4 = 6 bitowo to bedzie: 110
malarz grafik fotograf 1|2|4 = 7 bitowo to bedzie: 111

Jak chcesz w zapytaniu znaleźć w zapytaniu grafika to robisz:
  1. SELECT * FROM tabela WHERE cecha & 2

fotografa:
  1. SELECT * FROM tabela WHERE cecha & 4

Proste, lekkie i przejemne smile.gif

edit: rozwiązanie to ma jeszcze jedną zalete. Twoj zapis 5 cyfr zajmowal by 5 bajtow. Moje rozwiązanie zajmuje tylko jeden bajt. Pięciokrotne zaoszczedzenie miejsca winksmiley.jpg
singles
Nie potrzebujesz żadnych wyrażeń regularnych, tylko iloczyn logiczny.
Robisz jedno pole, cechy, i wiesz, że:
bit 1 - malarz
bit 2 - grafik
bit 3 - rzeźbiarz
itd.

I teraz zapisując w bazie kogoś, kto ma wszystkie 3 wymienione cechy to wpisujesz: 7. Dlaczego? Dla każdego bitu 1 czyli 1 + 2 + 4 = 7.
A potem korzystając z operatora & wyciągasz to co Cię interesuje.

edit: no, tak jak @nospor napisał smile.gif
elmozaur
Dziekuje za porade zaraz biore sie za testowanie.
EDIT: Dziekuje dokladnie o to mi chodzilo
erix
Cytat
Strona jest o dzielach sztuki a cechy zapisuje tak:
cecha_malarz=10000, cecha_grafik=01000, cecha_fotograf=00100, cecha_malarz_grafik=11000, cecha_wszystko=11100. Taka cecha zapisywana jest razem z newsem dla ulatwienia wyszukiwania.

Zawsze możesz jeszcze skorzystać z pola SET w MySQL.
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.