Posiadam dwie tabele w postaci
CREATE TABLE `przychody` ( `id_przych` SMALLINT(6) NOT NULL AUTO_INCREMENT, `data_przychod` DATE NOT NULL, `kategoria` VARCHAR(50) NOT NULL COLLATE 'utf8_polish_ci', `kwota_przychod` DOUBLE NOT NULL, `kanal` VARCHAR(4) NOT NULL, PRIMARY KEY (`id_przych`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DEFAULT AUTO_INCREMENT=0
oraz
CREATE TABLE `wydatki` ( `id_wyd` SMALLINT(6) NOT NULL AUTO_INCREMENT, `data_wydatek` DATE NOT NULL, `kategoria` VARCHAR(50) NOT NULL COLLATE 'utf8_polish_ci', `kwota_wydatek` DOUBLE NOT NULL, `kanal` VARCHAR(4) NOT NULL, PRIMARY KEY (`id_wyd`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DEFAULT AUTO_INCREMENT=0
Chciałem jakoś inteligentnie połączyć jakoś te table, żebym mógł znajdywać prawidłowość w postaci sumy z wydatków i przychodów z jednego miesiąca.
Jak widać żadna z tabel nie wspólnego id poza polem kanal. Jednak w tym przypadku join nie wchodzi w grę bo kanal to pięć powtarzających się wierszy (sposoby przepływu pieniędzy - karta kredytowa, konto, gotówka, itp...).
Wymyśliłem dość karkołomną konstrukcję:
CREATE TEMPORARY TABLE wydatki1 AS SELECT DISTINCT(date_format(data_wydatek,'%Y_%m')) AS miesiac, sum(kwota_wydatek) AS wydatki_miesiac FROM wydatki GROUP BY miesiac; ALTER TABLE wydatki1 ADD INDEX miesiac (miesiac); CREATE TEMPORARY TABLE przychody1 AS SELECT DISTINCT(date_format(data_przychod,'%Y_%m')) AS miesiac, sum(kwota_przychod) AS przychody_miesiac FROM przychody GROUP BY miesiac; ALTER TABLE przychody1 ADD INDEX miesiac (miesiac); ----pytanie dotyczące powyższych tabel tymczasowych SELECT miesiac, przychody_miesiac, wydatki_miesiac FROM wydatki1 JOIN przychody1 USING(miesiac);
No właśnie. Wszytko niby OK, ale:
wydaje mi się, ze z punktu widzenia wydajności to trochę niewygodne i niedobre dla bazy (nie wiem czy nie lepsze byłby widoki w tym przypadku)
i pytanie dodatkowe - korzystając z programów "zewnętrznych" - heidiSQL i mysql Query Browser uruchamiając cały skrypt od razu nie tworzą mi się tabele - tak jakby zamykało się połączenie po pytaniach alter table. Dodam, ze w phpmyadmin pytanie wykonuje się bezproblemowo.
Z góry dzięki za rady