Autor | Zpráva | ||
---|---|---|---|
shaman171 Profil |
#1 · Zasláno: 4. 12. 2016, 20:23:10
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 |
#2 · Zasláno: 5. 12. 2016, 21:14:33
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 |
#3 · Zasláno: 6. 12. 2016, 03:29:34
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 |
#4 · Zasláno: 6. 12. 2016, 15:58:28
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 * |
#5 · Zasláno: 6. 12. 2016, 16:25:03
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. |
||
Časová prodleva: 8 let
|
0