Autor Zpráva
shaman171
Profil
Ahoj,
na první pohled to vypadá jako jednoduchá věc, ale už několik hodin mi to nejde a nejde.

Jedná se o to, že mám databázi, která vypadá například takto:
RFID    Den    Měsíc    Rok    Čas    Pozice    Jméno    Příjmení    Firma    ID
2846308    4    12    2016    7:59:27    Dělník    Petr    Novák    S4Y    1
2973810    4    12    2016    7:59:40    Dělník    Ivan    Tominec    ZAKA    2
2973810    4    12    2016    16:59:40    Dělník    Ivan    Tominec    ZAKA    3
2846308    4    12    2016    17:59:27    Dělník    Petr    Novák    S4Y    4
2846308    5    12    2016    6:59:27    Dělník    Petr    Novák    S4Y    5
2846308    5    12    2016    17:10:27    Dělník    Petr    Novák    S4Y    6

A já z této databáze chci vybrat časy člověka se stejným jménem a příjmením za určitý den a jeden i druhý čas zapsat do různých proměnných. Uvažuji s tím, že nemusí za jeden den být pouze dva časy, ale může jich být až šest.
Následně tyto časy od sebe odečítám, zjišťuji uplynulou dobu mezi nimi a poté výslednou hodnotu vypisuji. Bohužel mi to ale nefunguje a nejsem schopný ani vypsat časy do dvou (potažmo šesti) proměnných a v případě, že jsou jen dva časy do zbylých proměnných dát nuly.
Jedná se o část přístupového systému do firmy.

Kód výběru z databáze je zde:
$sql_cas = "SELECT jmeno, prijmeni, den, mesic, rok, cas FROM dochazka WHERE (den = '".$j."' AND mesic = '".$mesic."' AND rok = '".$rok."' AND jmeno = '".$jmeno."' AND prijmeni = '".$prijmeni."') ORDER BY autoid ASC";
$result_cas = $con->query($sql_cas);
if ($result_cas->num_rows > 0) {
    // output data of each row
    for($k=1; $k <7; $k++) 
    {
    $row_cas = $result_cas->fetch_assoc();
    if ($k=1) {$cas1 = $row_cas["cas"];}
    if ($k=2) {$cas2 = $row_cas["cas"];}
    if ($k=3) {$cas3 = $row_cas["cas"];}
    if ($k=4) {$cas4 = $row_cas["cas"];}
    if ($k=5) {$cas5 = $row_cas["cas"];}
    if ($k=6) {$cas6 = $row_cas["cas"];}
    } //konec nejmenšího for cyklu
    
    //rozdil prvnich dvou casu
    $cas1_1 = new DateTime($cas1);
    $cas2_1 = new DateTime($cas2);
    $cas3_1 = new DateTime($cas3);
    $cas4_1 = new DateTime($cas4);
    $cas5_1 = new DateTime($cas5);
    $cas6_1 = new DateTime($cas6);
    
    $interval = date_diff($cas1_1, $cas2_1);
    $interval2 = date_diff($cas1_1, $cas2_1);
    $interval3 = date_diff($cas1_1, $cas2_1);
    $interval = $interval1 + $interval2 + $interval3;
     
    echo "<td>";
    echo $interval->format('%h:%i');
    echo "</td>";
  }
  else {
  echo  "<td>-</td>";
  }


Dokážete mi někdo poradit, jak to udělat? Snažil jsem se to popsat co možná nejlépe o co se snažím.

Předem moc děkuji!
shaman171
Profil
Tak jsem nad tím dumal a dumal, až jsem přišel na opačné řešení, které ovšem také vedlo ke zdárnému výsledku, i když lehce krkolomnou cestou.

Kdyby to někdo v budoucnu potřeboval řešit, tak by mu mohlo pomoci, že jsem nevypisoval do dvou (případně více) různých proměnných, ale použil jsem SQL příkaz "group_concat" a pomocí něj jsem všechno naházel do jedné proměnné, do jednoho řetězce, který jsem následně pomocí dalších PHP funkcí rozporcoval tak, jak bylo potřeba pro další postup kódu a funguje to bez problémů.

Tak třeba to v budoucnu bude někomu nápomocné :)
Keeehi
Profil
shaman171:
No, to bude asi proto, že jsi nikdy neslyšel o poli. Pokud musíš pojmenovávat proměnné $foo1, $foo2, ..., $fooN tak ke to známka, že s největší pravděpodobností to děláš špatně a měl bys použít pole.
Pavel Krátký
Profil
shaman171:
Já se jen přidám, že namísto filtrování podle AND jmeno = '".$jmeno."' AND prijmeni = '".$prijmeni."' je lepší používat sloupec / proměnnou RFID a - dobudoucna se naučit rozdělovat data do 2 (a více) tabulek - v jedné držíš údaje o zaměstnanci (RFID, jméno, příjmení, pozice, platová třída atd..) a v druhé pak data o "docházce" :) Ty dvě tabulky pak spojíš přes to RFID.

Ale to je jen taková malá poznámka. Co jsem chtěl říct je, že se mi líbí, když se tazatel, i když mu nikdo neporadil a "přišel si na to sám", následně o to "přišel si na to sám" podělí. Kdyby se tady dávaly laiky, tak ode mě ho máš :)
juriad_
Profil *
Pavel Krátký:
RFID vypadá jako číslo přístupové karty. Lidé ji ztrácí neustále a předávají, chtělo by tedy vytvořit nový atribut EID unikátní pro každého zaměstnance.
Zaměstnanec současně bude mít RFID karty, kterou vlastní.
Součástí docházky by pak bylo EID i RFID - RFID slouží jen pro dohledání uživatele, který danou kartu v daný okamžik vlastní.

Další rozšíření by pak bylo to, že každý záměstnanec smí mít víc karet, které jsou platné od-do (tedy další tabulka karet). Tím pak zajistíš plnou historii, kdo kdy jakou kartu vlastnil.

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: