| 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: 9 let
|
|||
0