Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sprawdzanie, czy warunek jest poprawnie napisany
Darek M.
post 19.01.2017, 14:34:29
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.05.2013

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


Witam po dłuższej przerwie,

słowem wstępu, tworzę funkcjonalność, która pozwoli na tworzenie filtrów do pewnej z tablicy - takich filtrów mogę mieć do 10 sztuk, każdy jest obiektem przechowującym 3 wartości - nazwa pola, operator oraz wartość porównywana: w końcowej fazie będzie to zamieniane na część zapytania WHERE: "NazwaPola__c < 100". Obecnie każdy z tych filtrów jest łączony za pomocą "AND", tak więc posiadając takie filtry:

1. Koszt < 100
2. Nazwa LIKE '%Test'

otrzymam wszystkie, które mają w nazwie Test i ich koszt jest mniejszy niż 100. Po dodaniu trzeciego filtra:

3. Koszt > 150

nie będę miał żadnego rekordu, bo nie możliwe, aby Koszt był zarówno mniejszy od 100 i większy od 150 - i tu dochodzimy do sedna. Użytkownik mam mieć możliwość dostosowania filtrów w taki sposób, że może w odpowiednim polu wpisać coś w stylu:

"(1 AND 2) OR 3"

wtedy, zapytanie ma być zbudowane według tego wzorca i za 1, 2 oraz 3 wstawić odpowiednio filtry - to już mam obcykane. Problemem jest walidacja tej logiki: w jaki sposób mogę sprawdzić, czy aby na pewno użytkownik wpisał poprawnie warunek (tj. liczba nawiasów się zgadza) oraz mam pewność, że nie ma czegoś takiego jak "1 AND OR 2" czy "1 AND ()". Liczbę nawiasów obecnie waliduję w taki sposób, że zliczam od lewej liczbę nawiasów otwierających oraz zamykających - jeśli zamykających w trakcie przechodzenia od lewej mam więcej niż otwierających, lub otwierających na zakończenie jest więcej niż zamykających, jednak nie wiem, co zrobić z samą logiką.

Dziękuję za wszelkie rady, pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Pyton_000
post 19.01.2017, 14:38:57
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pytanie jak to jest budowane?
Go to the top of the page
+Quote Post
Darek M.
post 19.01.2017, 14:47:43
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.05.2013

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


Z takiego wzorca:

"(1 AND 2) OR 3"

i filtrów jak powyżej powinno ułożyć:

  1. ... WHERE (Koszt < 100 AND Nazwa LIKE '%Test') OR Koszt > 150


ale rozchodzi się tylko i wyłącznie o walidację tego warunku, a nie to, jak będzie zbudowany później.
Go to the top of the page
+Quote Post
Pyton_000
post 19.01.2017, 14:52:13
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


http://stackoverflow.com/questions/1471855...ators-in-string
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: 18.07.2025 - 02:24