wyrażenie pobierające nazwy tabel z zapytania |
wyrażenie pobierające nazwy tabel z zapytania |
2.09.2011, 12:29:40
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Muszę wybrać nazwy tabel z dowolnego zapytania.
Interesuje mnie każda nazwa tabeli czy to jest w podzapytaniu czy w zapytaniu głównym w join czy w czym kolwiek innym Tabele jak to tabele mogą mieć różne postacie tabela baza.tabela `tabela` `baza`.`tabela` mogą być po FROM, po JOIN po FROM z przecinkami i kupa różnych kombinacji. Męczę teraz to wyrażenie ale może ktoś już musiał kiedyś robić coś podobnego i może się wiedzą podzielić? A może jakieś podpowiedzi? Zastanawiam się w ogóle, czy da się to jednym wyrażeniem pobrać, czy nie trzeba będzie zrobić ich więcej. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
2.09.2011, 12:44:21
Post
#2
|
|
Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) |
Zerknij sobie tutaj: http://www.phpclasses.org/package/5007-PHP...amatically.html
Nie używałem - tylko wyszperałem. Pozdro PS. Także tutaj coś jest: http://riceball.com/d/content/sql-expressi...ser-and-builder Ten post edytował tolomei 2.09.2011, 12:52:18 -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
2.09.2011, 12:58:57
Post
#3
|
|
Grupa: Zarejestrowani Postów: 153 Pomógł: 41 Dołączył: 28.06.2011 Skąd: Częstochowa Ostrzeżenie: (0%) |
A może spróbować w ten sposób:
Wybrać z bazy danych nazwy wszystkich tabel i sprawdzić, które znajdują sie w zapytaniu... |
|
|
2.09.2011, 13:49:46
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) |
A jeżeli w zapytaniu użyje aliasu?
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
2.09.2011, 14:15:52
Post
#5
|
|
Grupa: Zarejestrowani Postów: 153 Pomógł: 41 Dołączył: 28.06.2011 Skąd: Częstochowa Ostrzeżenie: (0%) |
|
|
|
2.09.2011, 14:36:06
Post
#6
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 8 Dołączył: 28.07.2009 Ostrzeżenie: (0%) |
a w jakimś orm-ie, nie ma gotowego rozwiązania żeby je ewentualnie podpatrzeć i zaimplementować? Propel, Doctrine? Zdaje mi się że domyślny ORM Kohany też będzie pomocny.
Ten post edytował gac3k 2.09.2011, 14:43:28 |
|
|
5.09.2011, 13:22:18
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Cytat Wybrać z bazy danych nazwy wszystkich tabel i sprawdzić, które znajdują sie w zapytaniu... A jeśli w zapytaniu będą takie tabele, których nie mam w bazie? Je też chcę wyłapać.@tolomei dzięki za linka, przejrzę i dam znać co z tego wynikło. Jakieś inne sugestie? @tolomei pierwszy link radzi sobie nawet ładnie z prostymi zapytaniami. Niestety gdy pojawia się podzapytanie to się wywala drugi link zaś nie zawiera wszystkich kodów. Niby autor wspomina, że udostępni całość gdzieś później ale nigdzie nie udało mi się całej paczki zlokalizować. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
5.09.2011, 13:58:12
Post
#8
|
|
Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 |
EDIT: Mała poprawka co do kodu na FB.
Nie wiem do czego to potrzebujesz, ale przyszło mi do głowy jeszcze jedno rozwiązanie. Mianowicie EXPLAIN, z tym że pokazuje aliasy zamiast nazw tabel. EDIT: Jeszcze drobne poprawki, bo ludzie różnie zapisują zapytania. |
|
|
5.09.2011, 18:34:11
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
$q = 'select * from `tab1`,tab2';
Najprostrze zapytanie i już nie działa na tym wyrażeniu. Obawiam się, że jednym wyrażeniem regularnym tego się nie uda zrobić. Co do explain to nie mogę tego użyc bo: 1) explain działa tylko na tabelach, które są w bazie. Ja w zapytaniu mogę mieć tabele, których nie będzie. 2) docelowo operować będę na różnych bazach, nie tylko mysql -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
6.09.2011, 08:51:47
Post
#10
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz |
@nospor tylko tokenizowanie SQL'a, albo parę wyrażeń reg. Ciężko napisać wyrażenie które obejmie wszystkie warunki.
Ewentualnie możesz zobaczyć czy baza danych nie ma kwerendy która zwróci wszystkie tabele które zostały użyte w poprzedniej kwerendzie Ewentualnie jeżeli to będzie na różnych typach baz danych to łap to w orm'ie (o ile chcesz użyć tego 'przy pisani aplikacji');
Powód edycji: [hwao]:
|
|
|
6.09.2011, 09:23:25
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
A czy jakiś spec od orm jest w stanie powiedzieć czy jest tam parsowanie podanego zapytania?
W tej chwili męczę analizę zapytania przez tokeny i się nie wyrobię w poznawanie jeszcze ORMa, a może ktoś zna odpowiedź na to pytanie? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
6.09.2011, 10:32:10
Post
#12
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Doctrine2 powinno Ci ułatwić robotę. Mógłbyś sobie nadpisać Parser, tak żeby nie był związany z EntityManagerem, tzn. żeby nie szukał w nim Twoich tabel. Prostsze rozwiązanie to wykorzystanie Lexera i wyciągnięcie wszystkiego samemu. Mały przykład:
|
|
|
8.09.2011, 09:24:13
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Ostatecznie podzieliłem sql na tokeny a potem analizowałem to ustrojstwo. Żeby nie podzapytania to sprawa byłaby nawet banalna, niestety podzapytania trochę skomplikowały sprawę.
Jak dopracuję kod to może wstawię. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 23:47 |