[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
sawic - 03-04-2006 00:08
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
Witam. Mam taką sytuacje: tabele: tb1, tb2
struktura tb1: - id (int) - pole1 (float) - pole2 (date)
struktura tb2: -id (int) - pole1 (float) - pole3 (timestamp)
zawartosc tb1 (pole1 - pole2): 5 - 2006-03-01; 10 - 2006-03-01; -5 - 2006-03-02. zawartosc tb2 (pole1 - pole3): 10 - 2006-03-01 17:58:02; -10 - 2006-03-03 18:12:11.
Muszę zadać takie pytanie aby wyciagnac z bazy sumę pole1 dla danego dnia zlozona z dwoch tabel w jeden wynik. Czyli powinno to wygladac tak:
tb1.pole1 | tb2.pole1 | data 15 | 10 | 2006-03-01 -5 | 0 | 2006-03-02 0 | -10 | 2006-03-03
Dla jednej tabeli to pikuś (select sum(pole1) ... group by pole2), ale dla dwóch na raz to już koszmar. Nie wiem jak się do tego zabrać. Wolałbym też uniknąć UNION, ze względu na jego implementację w php > 4.0 a nie wiem na jakiej bazie przyjdzie mi kiedyś pracować. Kombinowałem z join, i to chyba będzie to, ale niestety coś nie halo.
Proszę o jakieś naprowadzenie mnie na trop, podanie podobnego przykładu, ewentualnie napisanie gotowca, bo sam raczej nic tu nie poradze.
Pozdrawiam
Wojtek pBT (prac) - 04-04-2006 00:08
sawic napisał(a): > Witam.
cze [ciach]
> Dla jednej tabeli to pikuś (select sum(pole1) ... group by pole2), ale > dla dwóch na raz to już koszmar. Nie wiem jak się do tego zabrać. > Wolałbym też uniknąć UNION, ze względu na jego implementację w php > 4.0
A co ma PHP do UNION?
Tak wlasciwie to bez podzapytan raczej bedzie ciezko... Tabela tymczasowa Cie wtedy ratuje. Dodatkowym ratunkiem dal Ciebimoze byc to, ze w kazdej z tabel data wystepje conajwyzej raz:
SELECT tabl1.pole + tab2.pole, tab1.data FROM tab1 OUTER JOUN tab2 ON data_format(tab1.data,..) = date_format(tab2.data,...)
pBT
sawic - 04-04-2006 00:08
Wojtek pBT (prac) napisał(a): > A co ma PHP do UNION? Mój błąd, ale wiadomo o co chodziło.
> > Tak wlasciwie to bez podzapytan raczej bedzie ciezko... > Tabela tymczasowa Cie wtedy ratuje. > Dodatkowym ratunkiem dal Ciebimoze byc to, ze w kazdej z tabel data > wystepje conajwyzej raz: > > SELECT tabl1.pole + tab2.pole, tab1.data FROM tab1 OUTER JOUN tab2 ON > data_format(tab1.data,..) = date_format(tab2.data,...) > No właśnie data występuje wiele razy. Obecnie załatwiłem to takimi zapytaniami :
$pytanie = "select sum(pole1), DayOfMonth(pole2) as data from db.tb1 where pole2 like '2006-03-%' group by pole2 order by pole2";
while ($line = mysql_fetch_array($pytanie)) { $data = $line['data']; $pytanie1 = "select sum(pole1) from db.tb2 where DayOfMonth(date(pole3)) = '$data' and pole3 like '2006-03-%'; }
Narazie operuje na takim zapytaniu i to działa. Jedynym ograniczeniem jest to, że jeżeli w tb1 nie będzie konkretnego dnia miesiąca to tb2 nie zostanie dla tego dnia odpytane. Narazie taka sytuacja nie miała miejsca, i raczej nie prędko będzie miała, ale nie satysfakcjonuje mnie to, rozwiązanie musi być pewne w 100%.
Czy wobec nowych faktów, mógłby mi ktoś podpowiedzieć odpowiednie rozwiązanie ?
Pozdrawiam
keczerad - 04-04-2006 00:08
Wojtek pBT (prac) napisał(a):
> SELECT tabl1.pole + tab2.pole, tab1.data FROM tab1 OUTER JOUN tab2 ON > data_format(tab1.data,..) = date_format(tab2.data,...)
to powino zwrocic wszystkie rekordy (pisze z pamieci ale powinno byc oki)
SELECT (isnull(a.pole,0) + isnull(b.pole,0)) as 'Suma', case when a.data is null then b.data else a.data end as 'Data' FROM tab1 a Right JOIN tab2 b ON (data_format(a.data,'%Y-%m-%d') = date_format(b.data,'%Y-%m-%d'))
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML
sawic - 04-04-2006 00:08
keczerad napisał(a): > to powino zwrocic wszystkie rekordy (pisze z pamieci ale powinno byc oki) > > SELECT (isnull(a.pole,0) + isnull(b.pole,0)) as 'Suma', case when a.data > is null then b.data else a.data end as 'Data' FROM tab1 a > Right JOIN tab2 b ON > (data_format(a.data,'%Y-%m-%d') = date_format(b.data,'%Y-%m-%d')) >
Witam. Tylko, że ja nie chcę sumować pól z dwóch tabel ze sobą, a jedynie chce zsumować pola w jednej tabeli, gdzie data jest taka sama. A następnie podać wynik w postaci suma z tb1, suma z tb2, data.
Ale już coś mnie powyższe powoli naprowadza na trop. Z tym, że za lotny w tym to nie jestem :(
Jeżeli jeszcze komuś chciało by się pokombinować to 2 posty wyżej przedstawiłem sposób w jaki to tymczasowo rozwiązałem (oczywiście nie za dobry).
Pozdrawiam
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Gdzie MySQL 4.1, a gdzie 5.0?
[MS SQL] "set names" (mySQL) w MS SQL
oracle -> oracle lub oracle -> mysql replikacja - programy
[MySQL] Zwrot tego, co pasuje i nie pasuje :-/
[pgsql] Dostosowanie składni MySQL 5.0 -> PGSQL 8.1
[mysql] galeria zdjec - numerowanie zdjec
[mysql] CONCAT agregujący, ale nie GROUP_CONCAT()
mysql data 0000-00-00 na koniec
[MySQL] Problem z zapisem danych w bazie danych
jak przenieesc czesc tabeli do innej tabeli MySQL
zanotowane.pldoc.pisz.plpdf.pisz.plnocnerozmowy.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|