![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Administrator serwera Grupa: Developerzy Postów: 521 Pomógł: 13 Dołączył: 2.04.2004 Skąd: 52°24' N 16°56' E Ostrzeżenie: (0%) ![]() ![]() |
Zastanawiam się, jak byście rozwiązali sprawę tworzenia składni dla klauzuli WHERE i w jaki sposób takową składnię sparsować??
Ja wpadłem na taką składnię:
gdzie przecinek oznacza domyślnie operator logiczny AND i coś takiego:
gdzie '+' oznacza AND, a '-' oznacza OR. No i jeszcze trzeba doliczyć operatory porównania: '=', '!=', '<', '>', '<=', '>=' i może jakieś wyrażenia regularne proste, np. '%', '^', '$', gdzie '%' oznacza, że nie liczy się umiejscowienie treści w wartości kolumny, '^' oznacza, że treść musi się znaleźć na początku wartości kolumny, a '$' oznacza, że treść musi się znaleźć na końcu wartości kolumny. Możnaby też nie używać nawiasów i zastosować same AND i OR w jawnej postaci, ale to by trochę utrudniło sprawę parsowania. A odnośnie parsowania, to głównym problemem jest dokładne określenie stringu jako treści, bo może być przecież taka sytuacja: colname='content' i za content podstawiamy, np. "jakaś_treść' colname='content'". No i jeszcze sposób w jaki wyciągniemy wszystkie dane: zdecydowanie najłatwiej z czegoś takiego:
No i oczywiście trzeba ustandaryzować w jakiś sposób znaki nowego wiersza i linii: czyli musimy wszystkie takowe znaki zamienić na jeden rodzaj, np.
no i potem je jakoś wyeliminować, za pomocą jakiegoś bardzo rzadko spotykanego zestawu znaków lub znaku, np.
Może ktoś ma jakieś ciekawe rozwiązanie i się nim zechce podzielić, lub też potrafi sparsować zapytanie bez nawiasów z jawnymi operatorami logicznymi: AND i OR ? |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie bez nawiasow - nie. Nieraz to jest wymaganie dla warunkow grupowych.
A co z tamim czyms jak IS NUL, IS NOT NULL, IN, NOI IN, podzapytania wywolania funkcji itd? Zastanow sie jak to rozwiazac. |
|
|
![]() ![]()
Post
#3
|
|
Administrator serwera Grupa: Developerzy Postów: 521 Pomógł: 13 Dołączył: 2.04.2004 Skąd: 52°24' N 16°56' E Ostrzeżenie: (0%) ![]() ![]() |
Bez takich dodatków, bo to skomplikowałoby sprawe w składni. I nadal nie mam pomysłu jak sie pozbyć zagnieżdżonych wyrażeń, chyba żeby warunki były w takiej postaci:
czyli warunki byłyby oddzielone znakiem nowej linii, a to już jakiś postęp (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ,bo trochę łatwiej takie coś sparsować (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) i wtedy nawet jak mi ktoś zagnieździłby warunek to, aby faktycznie był to koniec danego warunku to dokładnie na końcu danego stringu musiałby się znajdować jakiś z góry określony ciąg znaków, ale jak słusznie zauważyłeś bez nawiasów nie da rady. Czyli forma musi pozostać czysto SQL-owska:
A jak rozwiązać sprawę nawiasów? PS. Tak mnie teraz naszło, a gdyby tak warunki logiczne: AND i OR dawać w osobnych liniach, a także warunki muszą się zaczynać i kończyć w liniach? Ten post edytował Zbłąkany 4.06.2005, 17:05:24 |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Ja bym to tak rozwiazal spawdzasz czy jest WHERE jesli jest to sprawdzasz czy istatniej wartunek(i). Dla nawiasow spawdzasz czy jest nawias otwierajacy i czy jest nawias zamykajacy przy czym nawiasy musza obejmowac warunki.
Przepatrz sobie tidy lub parser xml tam podeszli troche w stylu stosu, moze Cie to naprowadzi na wlasciwy tor. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 16:26 |