kamiox
15.02.2004, 21:55:02
[sql:1:3a0e7dbb47]SELECT $tabela.$co, $tabela.$co2, SUM((m_2*ilosc*(1+m_1/100))+(m_4*m_3*ilosc/100)) AS suma FROM $tabela, fdost WHERE $tabela.k_dok = '$k_dok' AND $tabela.data_d >= '.$data_p.' AND $tabela.data_d <= '.$data_k.' GROUP BY $tabela.$co ORDER BY suma DESC[/sql:1:3a0e7dbb47]
Mam taki kod sql problem w tym że w bazie mam ponad 50 tys rekordów i mysql sie nie wyrabia przy takiej ilości danych:(.
Jak to zoptymailzować ?
scanner
15.02.2004, 21:56:24
Temat niezgodny z regulaminem. Zamykam.
Edit: Po zablokowaniu zobaczyłem zmieniony temat, Odblokowuję.
spenalzo
15.02.2004, 22:14:06
Po co dołączasz drugą tabele skoro z niej nie korzystasz? W tym typie złączenia liczba wierszy z jednej tabeli zostanie pomnożna przez liczbę z drugiej, a więc jeżeli nie określisz warunków to skrypt ma prawo sie wysypać

A więc jeżeli w jednej masz 50000 rekordów a w drugiej tylko 20 to już masz milion rekordów...
kamiox
15.02.2004, 22:19:06
mhmm zapomniałem dopisać do tamtego kodu sql ze jeszcze korzystam z tabli fdost, w tabli fdost jest nazwa dla symb_dost, i wlasnie po to mi jest ta druga tabela
spenalzo
15.02.2004, 22:20:33
To weź to podaj tak jak powinno być - zaytanie a nie jakieś zmienne.
kamiox
15.02.2004, 22:26:44
[sql:1:9501e06513]SELECT $tabela.symb_dost, fdost.symb_dost, fdost.*, SUM(($tabela.ilosc)) AS suma FROM $tabela, fdost WHERE $tabela.k_dok = '$k_dok' AND $tabela.data_d >= '.$data_p.' AND $tabela.data_d <= '.$data_k.' and fdost.symb_dost=$tabela.symb_dost GROUP BY $tabela.symb_dost ORDER BY suma DESC[/sql:1:9501e06513]
spenalzo
15.02.2004, 22:32:50
Mi sie wydaje, że masz niewłaściwe pole zdefiniowane przy GROUP BY.
kamiox
15.02.2004, 22:45:21
to jak mam to zapisać? Żeby nie było "Maximum execution time of 30 seconds exceeded" ?
$tabela jest to tabela z której licze sume i grupuje wg symbolu dostawcy
fdost w tej tabeli mam informacje o dostawcy z niej chce wyciągnąć nazwe dostawcy
wynik ma być w takiej postaci:
nazwa dostawcy - [suma]
FiDO
16.02.2004, 02:50:15
Podaj strukture obu tabel.
Wypadaloby tu zastosowac indeksy, potrafia dac sporego kopa.
kamiox
16.02.2004, 17:37:08
tabela fdost:
[sql:1:fde63ca6be]CREATE TABLE fdost (
row_id int(11) NOT NULL auto_increment,
symb_dost varchar(10) default NULL,
symb_plat varchar(10) default NULL,
nazwa varchar(50) default NULL,
kod_poczt int(11) default NULL,
miejsc varchar(30) default NULL,
ul_dom varchar(30) default NULL,
sp_zap int(11) default NULL,
k_dok int(11) default NULL,
rodz_tr int(11) default NULL,
innedane varchar(62) default NULL,
konto varchar(13) default NULL,
nip varchar(20) default NULL,
tekst mediumtext,
bank varchar(40) default NULL,
nr_rach varchar(40) default NULL,
grupa varchar(10) default NULL,
PRIMARY KEY (row_id)
) TYPE=MyISAM;[/sql:1:fde63ca6be]
tabela $tabela
[sql:1:fde63ca6be]CREATE TABLE $tabela (
row_id int(11) NOT NULL auto_increment,
k_dok int(11) default NULL,
nr_dok int(11) default NULL,
symb_dost char(10) default NULL,
data_d date default NULL,
data_s date default NULL,
symb_tow char(13) default NULL,
cena double default NULL,
nazwa char(30) default NULL,
kontop int(11) default NULL,
m_1 double default NULL,
m_2 double default NULL,
m_3 double default NULL,
m_4 double default NULL,
m_5 double default NULL,
j_m char(3) default NULL,
ilosc double default NULL,
zn_op int(11) default NULL,
nr_dok_mag int(11) default NULL,
n_d int(11) default NULL,
sp_zap int(11) default NULL,
termn int(11) default NULL,
gotowka double default NULL,
czek double default NULL,
transport double default NULL,
znx int(11) default NULL,
znx1 int(11) default NULL,
zn_rap int(11) default NULL,
znodczytu int(11) default NULL,
znprzes int(11) default NULL,
zn_fk int(11) default NULL,
nr_fak char(15) default NULL,
symb_st char(13) default NULL,
konto char(15) default NULL,
PRIMARY KEY (row_id)
) TYPE=MyISAM;
[/sql:1:fde63ca6be]
kamiox
17.02.2004, 19:30:51
mhmm no więc ktos ma jakąś propozycje co z tym zrobić ?