Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Połączenie stringów w nazwie tabeli
TomASS
post 14.11.2011, 14:34:29
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cześć,

Mam bazę danych, w której co miesiąc tworzona jest nowa tabela:
pl_201101 w styczniu
pl_201102 w lutym

itd.


chciałbym pobierać dane zawsze z najnowszej tabeli. Mogę pobrać rok oraz miesiąc z aktualnej daty
  1. SELECT to_char(sysdate,'YYYY') FROM dual


ale zaciąłem się na łączeniu stringów w nazwie tabeli:
  1. SELECT * FROM CONCAT('pl_','201110') B
niestety nie działa sad.gif

Ten post edytował TomASS 14.11.2011, 15:49:11


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
wookieb
post 14.11.2011, 14:44:56
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nazwa tabeli nie może być dynamiczna. Koniec kropka.
Powód edycji: [wookieb]:


--------------------
Go to the top of the page
+Quote Post
Crozin
post 14.11.2011, 14:56:15
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Podstawowe pytanie to czemu nie masz jednej tabeli "pl", a niej kolumny z datą?
Go to the top of the page
+Quote Post
luckyps
post 14.11.2011, 14:59:46
Post #4





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

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


Pozostaje Ci napisanie funkcji.
Go to the top of the page
+Quote Post
Niktoś
post 14.11.2011, 15:01:58
Post #5





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Wydaje mi się,że rozwiązanie Crozina jest lepsze.
Go to the top of the page
+Quote Post
wookieb
post 14.11.2011, 15:10:42
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Ech gadanie od rzeczy. @Niktoś nie nabijaj postów
@TomASS Wygeneruj po prostu zapytanie w php. Inaczej tego nie zrobisz.
Powód edycji: [wookieb]:


--------------------
Go to the top of the page
+Quote Post
TomASS
post 14.11.2011, 15:44:34
Post #7





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cześć. Dzięki za info.
@Crozin:
Cytat
Podstawowe pytanie to czemu nie masz jednej tabeli "pl", a niej kolumny z datą?

Niestety nie moja baza danych. Przewiduję (nie chcę aby dyskusja o tym rozwinęła się w tym temacie), że każda z tabel ma około 22 mln rekordów.

@wookieb:
Cytat
Wygeneruj po prostu zapytanie w php. Inaczej tego nie zrobisz.

Niestety - php nie ma nic z tym wspólnego. Aplikacja czyta zapytanie z pliku txt i dane wyrzuca na serwer. Moim zadaniem jest napisać tylko zapytanie (zmiana co miesiąc jest bardzo kłopotliwa)

Ten post edytował TomASS 14.11.2011, 15:45:52


--------------------
Go to the top of the page
+Quote Post
stevan
post 14.11.2011, 21:16:19
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 30.08.2009

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


Tak naprawdę może najprostsze rozwiązanie jest najlepsze. A mianowicie piszesz zapytanie które będzie obsługiwało te tabele przez określony czas np 2 lata. Tak naprawdę to tylko kopiuj, wklej z drobnymi zmianami. W zapytaniu uzależnij odczytanie tabeli od aktualnej daty wykorzystując chociażby instrukcję IF. Proste ale powinno działać smile.gif...
Go to the top of the page
+Quote Post
TomASS
post 14.11.2011, 21:46:21
Post #9





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat(stevan @ 14.11.2011, 22:16:19 ) *
Tak naprawdę może najprostsze rozwiązanie jest najlepsze. A mianowicie piszesz zapytanie które będzie obsługiwało te tabele przez określony czas np 2 lata. Tak naprawdę to tylko kopiuj, wklej z drobnymi zmianami. W zapytaniu uzależnij odczytanie tabeli od aktualnej daty wykorzystując chociażby instrukcję IF. Proste ale powinno działać smile.gif...

Czy w samym zapytaniu mogę to zrobić? Tzn użyć IF?


--------------------
Go to the top of the page
+Quote Post
stevan
post 14.11.2011, 21:56:39
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 30.08.2009

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


Tworzysz skrypcik IF SYSDATE tutaj warunek THEN SELECT nazwa_tabeli...... END IF. i powielasz zmieniając warunek i nazwę tabeli.
Go to the top of the page
+Quote Post
TomASS
post 14.11.2011, 22:03:04
Post #11





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat(stevan @ 14.11.2011, 22:56:39 ) *
Tworzysz skrypcik IF SYSDATE tutaj warunek THEN SELECT nazwa_tabeli...... END IF. i powielasz zmieniając warunek i nazwę tabeli.


A będzie to traktowane jako jedno zapytanie, czy skrypt muszę zrobić w jakiejś aplikacji?
Mogę tylko modyfikować plik *.txt z zapytaniem.


--------------------
Go to the top of the page
+Quote Post
stevan
post 14.11.2011, 22:07:14
Post #12





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 30.08.2009

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


Tworzysz plik tekstowy i zmieniasz rozszerzenie na SQL... tyle

Ten post edytował stevan 14.11.2011, 22:07:40
Go to the top of the page
+Quote Post
TomASS
post 14.11.2011, 22:20:19
Post #13





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


czyli coś takiego:



  1. IF (sysdate>=2011-01-01 AND sysdate<=2011-01-31) THEN SELECT * FROM pl_201101
  2. ELSIF (sysdate>=2011-02-01 AND sysdate<=2011-02-28) THEN SELECT * FROM pl_201102
  3. ELSIF (sysdate>=2011-03-01 AND sysdate<=2011-03-31) THEN SELECT * FROM pl_201103
  4. ELSIF (sysdate>=2011-04-01 AND sysdate<=2011-04-30) THEN SELECT * FROM pl_201104
  5. ELSIF (sysdate>=2011-05-01 AND sysdate<=2011-05-31) THEN SELECT * FROM pl_201105
  6. ELSIF (sysdate>=2011-06-01 AND sysdate<=2011-06-30) THEN SELECT * FROM pl_201106
  7. END IF;


?

Ten post edytował TomASS 14.11.2011, 22:21:05


--------------------
Go to the top of the page
+Quote Post
stevan
post 14.11.2011, 22:25:58
Post #14





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 30.08.2009

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


Ja bym to zrobił tak
IF (sysdate>=2011-01-01 AND sysdate<=2011-01-31) THEN SELECT * FROM pl_201101 END IF;
IF (sysdate>=2011-02-01 AND sysdate<=2011-02-28) THEN SELECT * FROM pl_201102 END IF;
itd....

Ten post edytował stevan 14.11.2011, 22:26:28
Go to the top of the page
+Quote Post
everth
post 14.11.2011, 22:26:33
Post #15





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


A z drugiej strony - gdybyś tak z wszystkich tabel zbudował jedną (np. UNION ALL) zapisał ją jako widok i pobierał z niego tylko potrzebne wiersze. Na oko wygląda prościej - ciekawe jakby to wyglądało w praniu wink.gif


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
TomASS
post 14.11.2011, 23:31:09
Post #16





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat(everth @ 14.11.2011, 23:26:33 ) *
A z drugiej strony - gdybyś tak z wszystkich tabel zbudował jedną (np. UNION ALL) zapisał ją jako widok i pobierał z niego tylko potrzebne wiersze. Na oko wygląda prościej - ciekawe jakby to wyglądało w praniu wink.gif

A skąd mam wiedzieć co to jest "wszystkie tabele" - w styczniu będzie tylko pl_201101 w marcu już pl_201101 + pl_201102 + pl_201103 :/


--------------------
Go to the top of the page
+Quote Post
everth
post 15.11.2011, 00:21:56
Post #17





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Mogę się mylić. bo jak zwykle nie zwróciłem uwagi na działy (Oracle) - potraktuj więc to co piszę z dużą dozą nieufności smile.gif. Przegapiłem też to
Cytat
chciałbym pobierać dane zawsze z najnowszej tabeli. Mogę pobrać rok oraz miesiąc z aktualnej daty

W takim wypadku utworzenie widoku i odwoływanie się przez niego do tabeli także może być prostsze. Po prostu co miesiąc wraz z utworzeniem nowej (aktualnej) tabeli aktualizujesz widok. Może to robić ta aplikacja co, co miesiąc wrzuca dane na serwer.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
Niktoś
post 15.11.2011, 00:49:44
Post #18





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Druga kombinacja trochę alpejska-utworzyć w plik txt dodatkową kwerende odczytującą nazwy tabel możnaby użyć w niej klauzulę like %pl_ żeby nieco ograniczyć zakres do interesujących nas tabel.
Z kwerendy tej odczytujemy nazwy przykładowo pl_201101 pl_201102 i z pomocą np. wyrażenia regularnego wyciągamy liczby i patrzymy ,która liczba jest większa.Z wyrazu gdzie liczba jest największa używamy w zapytaniu -aby pobrać interesujące nas dane z tejże tabeli.

Ten post edytował Niktoś 15.11.2011, 00:51:46
Go to the top of the page
+Quote Post
TomASS
post 15.11.2011, 14:17:17
Post #19





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat(everth @ 15.11.2011, 02:21:56 ) *
Mogę się mylić. bo jak zwykle nie zwróciłem uwagi na działy (Oracle) - potraktuj więc to co piszę z dużą dozą nieufności smile.gif. Przegapiłem też to

W takim wypadku utworzenie widoku i odwoływanie się przez niego do tabeli także może być prostsze. Po prostu co miesiąc wraz z utworzeniem nowej (aktualnej) tabeli aktualizujesz widok. Może to robić ta aplikacja co, co miesiąc wrzuca dane na serwer.

Modyfikacja aplikacji niestety nie wchodzi w grę :/


Cytat(Niktoś @ 15.11.2011, 02:49:44 ) *
Druga kombinacja trochę alpejska-utworzyć w plik txt dodatkową kwerende odczytującą nazwy tabel możnaby użyć w niej klauzulę like %pl_ żeby nieco ograniczyć zakres do interesujących nas tabel.
Z kwerendy tej odczytujemy nazwy przykładowo pl_201101 pl_201102 i z pomocą np. wyrażenia regularnego wyciągamy liczby i patrzymy ,która liczba jest większa.Z wyrazu gdzie liczba jest największa używamy w zapytaniu -aby pobrać interesujące nas dane z tejże tabeli.

Nie mam dostępu do tabeli systemowej z nazwami tabel :/


--------------------
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: 14.08.2025 - 06:53