Autor | Zpráva | ||
---|---|---|---|
MilanKarkulka Profil |
#1 · Zasláno: 28. 10. 2016, 11:39:05
**mám tabulku, kde jsou uloženy zakázky (momentálně 3600 zakázek)**
ID | ZAKÁZKA 1 | Pepsi tvarování lahví 2 | Coca Cola návrh logo 3 | Sprite rozvoz zboží **pokud během dne udělám nějakou práci na zakázce, tak si mi do jiné tabulky o tom uloží záznam (momentálně 15 000 záznamů)** ID | ZÁKAZNÍK | PRÁCE | DÉLKA PRÁCE 1 | 2 | práce pro coca colu | 123123123 2 | 1 | práce pro pepsi | 142342343 3 | 3 | práce pro sprite | 134124312 Chci se podívat, na jakých zakázkách jsem tento měsíc pracoval: Jednoduše - beru jednu zakázku za druhou a dívám se, jestli mám v druhé tabulce pro ni nějaký záznam o provedené práci. $query=mysql_query("SELECT * FROM zakazky"); while ($get=mysql_fetch_array($query)) { $nazevzakazky = $get['nazevzakazky']; $idcko=$get['idcko']; $aaa=mysql_query("SELECT * FROM provedeneprace WHERE zamestnanec=$yyyuser AND zakazka=$idcko AND (den >=$startden AND den <=$endden)"); while ($bbb=mysql_fetch_array($aaa)) { $delkaprace=$delkaprace+$bbb["delkaprace"]; } echo "Na zakazce $nazevzakazky jsi tento mesic udelal $delkaprace"; } Tento můj způsob ovšem trvá 32 sekund... . Nevím, jak lépe bych to mohl řešit? |
||
Kcko Profil |
Ano, nastav tabulkám indexy na příslušné sloupce a tabulky spoj jedním dotazem přes
JOIN
Ty to vypisuješ všechno najednou? Nastav tomu taky nějaké stránkování nebo ještě lépe, detaily o práci vypisuj až v detailu zakázky. Ukládat do DB timestamp je většinou na nic; používej sloupce k tomu určené (DATE|DATIME|TIME). A určitě by se hodil nějaký DB layer než tyhle nativní funkce (navíc rodina mysql je už za chvíli mrtvá). Celkově ten kód je příšerný i konvence pojmenování proměnných. |
||
MilanKarkulka Profil |
#3 · Zasláno: 28. 10. 2016, 12:27:01
Vím co znamená JOIN v tabulkách, ale udělat jej neumím, protože nejsem primárně programátor.
Dokázal by jsi mi poradit, jak ten JOIN napsat pro tuto situaci? |
||
Kcko Profil |
MilanKarkulka:
www.itnetwork.cz/mysql/mysql-tutorial-dotazy-pres-vice-tabulek www.linuxsoft.cz/article.php?id_article=837 Jinak spojení provedeš přes tabulku zakazka.id , druha tabulka .zakaznik (opět pojmenované nekonzistetně). |
||
MilanKarkulka Profil |
#5 · Zasláno: 28. 10. 2016, 15:55:48
Už mi to funguje:
$query=mysql_query("SELECT cislozakazky, nazevzakazky, delkaprace, typprace, zamestnanec, den, id FROM zakazky INNER JOIN prace ON zakazka=idcko WHERE zamestnanec=$yyyuser ORDER by cislozakazky") or die(mysql_error()); while($result=mysql_fetch_array($query)){ $cislozakazky=$result["cislozakazky"]; $nazevzakazky=$result["nazevzakazky"]; $delkaprace=$result["delkaprace"]; if($result["den"]>=$startden AND $result["den"]<=$endden){ if($priznak!=$nazevzakazky AND $priznak!=""){ echo "<tr>"; echo "<td class=\"td\"><b>[$cislozakazky]</b> $priznak</td>"; $yyywhile=1; while($yyywhile!=12){ if($sklenik[$yyywhile]!=""){ $H = floor($sklenik[$yyywhile] / 3600); $i = ($sklenik[$yyywhile] / 60) % 60; $H = sprintf("%02d", $H); $i = sprintf("%02d", $i); echo "<td>$H:$i</td>"; }else{ echo "<td>-</td>"; } $yyywhile++; } $H = floor(array_sum($sklenik) / 3600); $i = (array_sum($sklenik) / 60) % 60; $H = sprintf("%02d", $H); $i = sprintf("%02d", $i); $yyytotal=$yyytotal+array_sum($sklenik); echo "<td><b>$H:$i</b></td>"; echo "</tr>"; unset($sklenik); } $abcd = $sklenik[$result['typprace']]; $sklenik[$result['typprace']]=$result['delkaprace']+$abcd; $priznak=$nazevzakazky; } } |
||
Časová prodleva: 8 let
|
0