Autor Zpráva
anna007
Profil *
Mám podobný problém, i když se jedná jen o výpis z mysql, asi taky kolem 5000 dotazů ne-li víc, ale je to dost pomalé, protože se vždycky dělají 2 - 4 různé dotazy k jednomu políčku a těch políček je asi 1200 + k tomu jsou nějaké podmínky a podobně. Zajímalo by mě, když bych nechala všechno potřebné nejdřív vypsat do pole (nebyla by to celá tabulka, ale jen asi těch 5000 údajů, ze dvou třetin jen 1 nebo 0, případně jedno slovo), a pak bych to brala z toho pole, místo aby se dělal pokaždý nový dotaz do databáze, jestli to bude rychlejší ? Nebo se to pole bude znova pokaždý načítat z té databáze ?
tiso
Profil
anna007:
1. založ si vlastnú témmu
2. lepšie vysvetli čo potrebuješ, uveď štruktúru tabuliek a použité dotazy, prípadne relevantnú časť php skriptu...
Alphard
Profil
anna007:
Možná to půjde řešit na úrovni databáze pomocí složitějšího dotazu. Jak už psal tiso, popiš, co přesně potřebuješ a jak je to teď.
anna007
Profil *
Teď mám funkci, která má 4 dotazy do databáze, do různých tabulek + dalších asi 5 podmínek v php. Jedná se o to, že se vypisujou lidi, kdo kdy má co na práci, může mít až 9 různých činností, ale většinou to budou tak 2 činnosti. Ta funkce se ale opakuje pro každou činnost, i když tam není žádný záznam, resp. je tam 0, a to v cyklu 14x - vypisuje se to na 14 dní. Takže pro jednoho člověka se opakuje 126x - to je 504 dotazů, které chci ale vypsat do toho pole. Těch lidí je kolem 12 - 20. Z databáze bych na začátku nechala vypsat ta 4 pole, která by se vztahovala jen k těm určitým dnům od - do. Prostě mě zajímá, jestli se to pole, jakmile se jednou vypíše z té databáze, někde uchová v paměti a ta funkce by si z toho pak brala jen ty prvky, nebo by se to pokaždý muselo při volání té funkce z té databáze znova tahat . Prostě nevim, jak to vlastně funguje.
tiso
Profil
anna007: a ďalej?
AM_
Profil
anna007
Zkus psát dotazy v diskusi tak, aby člověk neusnul, než je dočte.
Ve stručnosti: je to tak, že CELÝ výsledek dotazu opravdu zůstává v paměti v objektu či resource mysql_result, takže:
$q = mysql_query('...');
while ($row = mysql_fetch_array($q)){
  tento cyklus se provede pro vsechny radky, ktere jsou vysledkem dotazu
}

Pokud jsem to dobře pochopil a tobě zůstalo doposud utajeno, že na jeden výsledek dotazu můžeš mysql_fetch_* použít víckrát pro více řádků výsledku, budiž toto odpovědí.
anna007
Profil *
Zkus psát dotazy v diskusi tak, aby člověk neusnul, než je dočte.
Tak to je mi líto :-), ale snažila jsem se to napsat krátce :), no mě stačí vědět, že to zůstává v tý paměti, to je to, co mě zajímalo.
A tohle, co píšeš, používám samozřejmě furt, bez toho by to snad ani nešlo.
No nic, dík za snahu.
AM_
Profil
No, já jsem hlavně nepochopil, na co přesně byl dotaz. Pokud tedy na to, jestli mysql_fetch_array posílá při svém spuštění dotaz na server, nebo tahá výsledek z paměti, tak to je dotaz na jeden řádek a odpověď je, že je tahá z paměti. Vyčerpávající údaje kolik kde spojuješ tabulek k tomu znát nemusíme ;) jen se ti snažím pro příště naznačit, jak se efektivně zeptat.
anna007
Profil *
No vlastně jsem to asi myslela trochu jinak - na začátku by se vypsalo pole se všema výsledkama, který budou celkově potřeba
$q = mysql_query('...');
while ($row = mysql_fetch_array($q)){
  $pole_vsech_vysledku[$row['id_dne']]= $row['akce']; 
}

a pak bych si brala z toho pole, co je potřeba prostě - například : $pole_vsech_vysledku['kp091012'] pro člověka "kp" dne 12.10.2009
prostě jestli je rychlejší procházet to pole $pole_vsech_vysledku s asi tak 5000 prvků nebo dělat 5000x dotaz do databáze
Kajman_
Profil *
Většinou bude výhodnější to pole. Jen asi bude v tomto případě dvourozměrné
$pole_vsech_vysledku[$row['id_dne']][$row['id_cloveka']]= $row['akce'];
anna007
Profil *
To pole by mohlo být dvourozměrné, ale v tom, že těch akcí je pro ten den víc, nechtěla jsem to tak zamotávat. Jinak to id_dne se takhle generuje už při vkládání do databáze, s tim nemůžu už nic dělat. Dík moc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0