Zdravím, řeším tento probém.
Mam mySQL DB cca 60000 záznamu.
A potřebuji si vracet napočtené hodnoty do formuláře. viz. např. nové sauto http://beta.sauto.cz/osobni/hledani kdy při každé úprave ve formu dopočtou počty do každého selectu atd. Rád bych něco podobného. Pokud se to snažím dělat přes cyklus v PHP dostavam se při 5 položkách na čas 0,5 sekundy.
Nevíte někdo jak to řešit rychleji? Např. když rozšířím form na 50 položek.
No jde o to, že mi nejde jen o t o spočitat si počet count každe položky. Ale že každá z položek nabívá třeba 10 - 100 vlastností a já potřebuju u každé položky znát daný počet vlastnosti v 80 000 záznamech. Např. karoserie, 1 sloupec v DB, ale má 10 možností no a já potřebuju číslo, kolikrát je každá karoresrie zastoupena v DB, a takových položek, mame více než 20 (karoserie,znacka, poalivo, rok vyroby atd). A nejlépe to dostat na 1 SQL dotaz z DB, tak do 0,2 sekundy.
CREATE TABLE volnamista (
id_pozice int(11) NOT NULL auto_increment,
odkud char(1) character set cp1250 collate cp1250_bin NOT NULL,
profese_kod double NOT NULL,
profese_doplnek varchar(100) collate cp1250_czech_cs NOT NULL,
firma varchar(100) collate cp1250_czech_cs NOT NULL,
firma_ic double NOT NULL,
firma_www varchar(100) collate cp1250_czech_cs NOT NULL,
smennost_kod char(1) character set cp1250 collate cp1250_bin NOT NULL,
min_vzdelani_kod char(1) character set cp1250 collate cp1250_bin NOT NULL,
uvazek_kod char(1) character set cp1250 collate cp1250_bin NOT NULL,
konos_text varchar(100) collate cp1250_czech_cs NOT NULL,
konos_titul varchar(10) collate cp1250_czech_cs NOT NULL,
konos_jmeno varchar(50) collate cp1250_czech_cs NOT NULL,
konos_prijmeni varchar(255) collate cp1250_czech_cs NOT NULL,
konos_titul_za varchar(10) collate cp1250_czech_cs NOT NULL,
konos_telefon varchar(255) collate cp1250_czech_cs NOT NULL,
konos_email varchar(255) collate cp1250_czech_cs NOT NULL,
konos_text_adr varchar(255) collate cp1250_czech_cs NOT NULL,
pid bigint(11) NOT NULL,
ref varchar(15) collate cp1250_czech_cs NOT NULL,
uid double NOT NULL,
prac_nazev varchar(255) collate cp1250_czech_cs NOT NULL,
prac_okres varchar(50) collate cp1250_czech_cs NOT NULL,
prac_okres_kod double NOT NULL,
prac_obec varchar(100) collate cp1250_czech_cs NOT NULL,
prac_cobce varchar(100) collate cp1250_czech_cs NOT NULL,
prac_ulice varchar(100) collate cp1250_czech_cs NOT NULL,
prac_cp varchar(10) collate cp1250_czech_cs NOT NULL,
prac_co varchar(100) collate cp1250_czech_cs NOT NULL,
prac_psc varchar(6) collate cp1250_czech_cs NOT NULL,
prac_adr_pro_tisk varchar(255) collate cp1250_czech_cs NOT NULL,
mzda_min double NOT NULL,
mzda_max double NOT NULL,
prac_posta varchar(50) collate cp1250_czech_cs NOT NULL,
od date NOT NULL,
`do` date NOT NULL,
vhod_abs_ss char(1) character set cp1250 collate cp1250_bin NOT NULL,
vhod_abs_vs char(1) character set cp1250 collate cp1250_bin NOT NULL,
vhod_mladistvi char(1) character set cp1250 collate cp1250_bin NOT NULL,
vhod_neabsmld char(1) character set cp1250 collate cp1250_bin NOT NULL,
vhod_ozp char(1) character set cp1250 collate cp1250_bin NOT NULL,
vhod_ozp_tzp char(1) character set cp1250 collate cp1250_bin NOT NULL,
vhod_zdravi char(1) character set cp1250 collate cp1250_bin NOT NULL,
vhod_cizinci char(1) character set cp1250 collate cp1250_bin NOT NULL,
vhod_bezbar char(1) character set cp1250 collate cp1250_bin NOT NULL,
pzciz char(1) character set cp1250 collate cp1250_bin NOT NULL,
dlouho_neobsazeny char(1) character set cp1250 collate cp1250_bin NOT NULL,
celkem_vm char(1) character set cp1250 collate cp1250_bin NOT NULL,
poznamka text collate cp1250_czech_cs NOT NULL,
vm_www varchar(100) collate cp1250_czech_cs NOT NULL,
zmena datetime NOT NULL,
vyradit_dne date NOT NULL,
jak_kontaktovat char(1) character set cp1250 collate cp1250_bin NOT NULL,
urad_prace varchar(100) collate cp1250_czech_cs NOT NULL,
urad_prace_kod double NOT NULL,
autor char(1) collate cp1250_czech_cs NOT NULL,
obor varchar(50) collate cp1250_czech_cs NOT NULL,
dovednost varchar(50) collate cp1250_czech_cs NOT NULL,
dovednost_popis text collate cp1250_czech_cs NOT NULL,
povolani varchar(50) collate cp1250_czech_cs NOT NULL,
povolani_praxe varchar(50) collate cp1250_czech_cs NOT NULL,
vyhoda varchar(50) collate cp1250_czech_cs NOT NULL,
vyhoda_popis text collate cp1250_czech_cs NOT NULL,
jazyk varchar(50) collate cp1250_czech_cs NOT NULL,
jazyk_uroven varchar(50) collate cp1250_czech_cs NOT NULL,
jazyk_popis text collate cp1250_czech_cs NOT NULL,
aktivni char(1) collate cp1250_czech_cs NOT NULL default 'N',
pravni_vztah char(1) collate cp1250_czech_cs NOT NULL,
vzdelani varchar(50) collate cp1250_czech_cs NOT NULL,
vlozeno datetime NOT NULL,
PRIMARY KEY (id_pozice),
UNIQUE KEY uid (uid),
KEY mzda_min (mzda_min),
KEY mzda_max (mzda_max),
KEY prac_okres_kod (prac_okres_kod,aktivni,vlozeno),
KEY profese_kod (profese_kod,prac_okres_kod,aktivni,vlozeno),
KEY aktivni (aktivni,vlozeno),
KEY aktivni_2 (aktivni),
KEY firma_ic (firma_ic,pravni_vztah,prac_okres_kod,vlozeno)
) ENGINE=MyISAM DEFAULT CHARSET=cp1250 COLLATE=cp1250_czech_cs DELAY_KEY_WRITE=1;
A já chci at mi ten select vrati ze :
položka - profese_kod ma zastoupeny hodnoty : A -4x, B -3x
položka - aktivni má hodnota : A - 250x, N - 400x
položka - firma_ic má hodnota : 123456 - 4x atd.
select 'profese_kod' as dotaz,profese_kod,count(1)as pocet from volnamista where profese_kod in (A,B) group by profese_kod
union all
select 'aktivni' as dotaz,aktivni,count(1)as pocet from volnamista group by aktivni
union all
select 'firma_ic' as dotaz, firma_ic,count(1)as pocet from volnamista where firma_ic in ('123456') group by firma_ic