![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 3 Dołączył: 29.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
witam,
potrzebowałbym jakiejs sugestii jak sparsować dowolne (no może nie do końca dowolne bo selecta) zapytanie do mysqla tak zeby móc do niego dolozyc jakis warunek dodatkowy. Powiedzmy ze mam takie zapytania
i do wszystkich chcialbym dolozyc warunek field3='value3' zeby bylo
mam nadzieje ze wiadomo o co chodzi. -------------------- if the specifications are absolutely ambiguous, every program will satisfy them
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 220 Pomógł: 10 Dołączył: 23.08.2005 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Najlepiej napisz sobie funkcje np.
Oczywiście to jest przykład bardzo prostej, ale masz możliwość dowolnej manipulacji różnych wartości w zapytaniu. PS: Pisane z głowy więc mogą być błędy. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 3 Dołączył: 29.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzieki za pomoc ale to mi raczej nie pomoże. Może napisz dokładniej o co chodzi. Cały system połaczeń i obsługi bazy danych mam już zrobiony (przerabiam sklep internetowy na opencart oparty) i gdybym chciał dołożyć taka fukcje to musialby bym sie niezle napocic przy przepisywaniu tego kodu. Dlatego wydaje mi sie ze najprostszym rozwiazaniem byloby w jakis sposob sparsowac te zapytania i podokladac ten warunek tam gdzie jest mi potrzebny.
-------------------- if the specifications are absolutely ambiguous, every program will satisfy them
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 220 Pomógł: 10 Dołączył: 23.08.2005 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
A czy obsługujesz bazę danych przez własną klasę czy wbudowane funkcje PHP?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 3 Dołączył: 29.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
baza danych obslugiwana jest przez osobna klase tyle ze zapytania w tej klasie nie sa obslugiwane w sposob o ktorym pisales poprzednio ale w calosci sa wysylane do metody ktora je wywoluje
jak na razie udalo mi sie uzyskac to co chcialem uzywajac preg_split po slowach kluczowych MySQL'a (where, order by, group by etc.) i skladajac to pozniej do kupy juz po swojemu, wyglada to tak
moze ktos ma jakis pomysl jak to zrobic lepiej czy jasniej bo sam kod specjalnie czytelny mi sie nie wydaje. Przykladowo da takiego zapytania: select distinct ug.permission from user u left join user_group ug on u.user_group_id = ug.user_group_id where u.user_id = '3' dostaje: select distinct ug.permission from user u left join user_group ug on u.user_group_id = ug.user_group_id where u.field3 = 'someValue' and ( u.user_id = '3') -------------------- if the specifications are absolutely ambiguous, every program will satisfy them
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
1. Szukasz" /\\swhere\\s/i przy pomocy preg_match" title="Zobacz w manualu PHP" target="_manual
- Jeśli znalazłeś, to dodajesz zaraz za nim: " ( field3 = 'value3' ) AND " 2. Jeśli nie znalazłeś, to szukasz pierwszego wystąpienia tego wzorca: /\\s(group|order|limit)\\s/i. Wstaw sobie tutaj wszystkie słowa kluczowe jakie mogą wystąpić PO WHERE. Listę oraz KOLEJNOŚĆ (ważne!) znajdziesz w manualu na mysql.com - Jeśli znalazłeś, to dodajesz zaraz przed tym: " WHERE ( field3 = 'value3' ) " 3. Jeśli nie znalazłeś, to dodajesz na końcu zapytania: " WHERE ( field3 = 'value3' )" Żeby rozwiązanie było w pełni profesjonalne, to trzeba by jeszcze odsiać wystąpienia WHERE, GROUP, ORDER,... w podzapytaniach, komentarzach, apostrofach, odwróconych apostrofach i byćmoże cudzysłowu. Jednak myślę, że na twoje potrzeby wystarczy to co jest powyżej ;] Ten post edytował Kicok 29.02.2008, 00:19:34 -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 3 Dołączył: 29.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
dzieki za pomoc, powinno wystarczyc. Problem jest tylko z punktem pierwszym.
Cytat 1. Szukasz" /\\swhere\\s/i przy pomocy [manual\]preg_match\[/manual\] - Jeśli znalazłeś, to dodajesz zaraz za nim: " ( field3 = 'value3' ) AND " dokladanie warunkow w ten sposob powoduje ze jezeli w dalszej czesci zapytania jest np: "field1 = 'value1' OR field2 = 'value2'" to ten dodatkowy warunek nie ma zadnego znaczenia. Dlatego dokladam nawiasy na te warunki ktore juz mam w zapytaniu. co do rekurencji w zapytaniach zeby przeszukac ewentualne selecty w nim zawarte, to jak na razie nie jest mi potrzebne, a jak bedzie to sie bede wtedy meczyl ![]() w kazdym razie dzieki. Ten post edytował ppp 29.02.2008, 08:30:06 -------------------- if the specifications are absolutely ambiguous, every program will satisfy them
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 06:32 |