FAQ |
Kalender |
2016-09-20, 12:21 | #1 | ||
|
|||
Mycket flitig postare
|
Hej,
ska utveckla en mycket simple "stämpelkort", dvs tiden och datumet ska loggas vid incheckning och utcheckning... vilket är det mest optimala sättet att lägga upp databasen på? Såhär hade jag tänkt mig, [UserId], [TimeForCheckIn], [TimeForCheckOut] men det kändes inte riktigt rätt, eftersom jag hela tiden måste kontrollera ifall användaren har checkat in eller inte... och undder tiden användaren endast har checkat in så är ju [TimeForCheckOut] tomt. |
||
Svara med citat |
2016-09-20, 12:40 | #2 | ||
|
|||
Medlem
|
Citat:
Så kan du ha type = 1 för incheckning, 2 för utcheckning och du kan också lägga till fler typer för vilken typ av utcheckning osv. Annars så kommer ditt förslag fungera rätt bra. |
||
Svara med citat |
2016-09-20, 12:42 | #3 | ||
|
|||
Mycket flitig postare
|
tack men på ditt sätt hamnar jag i samma sits... två jag måste göra två kontrollerer, en kontrollen för att se ifall senaste "type" är incheckat så ska den nu checka ut.
|
||
Svara med citat |
2016-09-20, 15:07 | #4 | ||
|
|||
Har WN som tidsfördriv
|
Det finns många sätt att lösa det där på, jag hade nog gjort liknande som SvanteH.
Börja med en kravlista hur det ska fungera (use cases), utifrån dem kan du sen skapa upp affärslogik och datalager. Varför skriver jag det? Jo: du anger villkor i ditt svar till SvanteH, och om du inte har detaljerat affärsreglerna kan du inte heller få bra svar på din undring. |
||
Svara med citat |
2016-09-20, 15:26 | #5 | ||
|
|||
Medlem
|
Vad är det för problem med det? Det är en liten tabell med definerad nyckel, uppslag är billigt?
|
||
Svara med citat |
2016-09-20, 15:45 | #6 | ||
|
|||
Medlem
|
Ett snabbt exempel på en vy i MySQL för att se in och utstämplingar.
Där den matchar senaste instämplingen och närmaste utstämpling Kod:
CREATE ALGORITHM=UNDEFINED DEFINER=`reed`@`localhost` SQL SECURITY DEFINER VIEW `stamps` AS SELECT `A`.`id` AS `aid`, `B`.`id` AS `bid`, `A`.`terminalid` AS `aterminalid`, cast(`A`.`date` as date) AS `adate`, cast(`A`.`date` as time) AS `atime`, dayname(`A`.`date`) AS `aday`, `A`.`date` AS `adatetime`, `B`.`terminalid` AS `bterminalid`, cast(`B`.`date` as date) AS `bdate`, cast(`B`.`date` as time) AS `btime`, dayname(`B`.`date`) AS `bday`, `B`.`date` AS `bdatetime`,timestampdiff(HOUR,`A`.`date`, `B`.`date`) AS `timedifference`, `A`.`type` AS `atype`, `B`.`type` AS `btype`, `A`.`employee_no` AS `employee_no`, `A`.`cardtype` AS `acardtype`, if((substr(`A`.`cardno`,1,3) = '000'),substr(`A`.`cardno`,2),`A`.`cardno`) AS `acardno`, `B`.`cardtype` AS `bcardtype`, if((substr(`B`.`cardno`,1,3) = '000'),substr(`B`.`cardno`,2),`B`.`cardno`) AS `bcardno`, `A`.`firstname` AS `firstname`, `A`.`lastname` AS `lastname`, `A`.`role` AS `role`, `A`.`competence` AS `competence` FROM `tt_stamps` `A` JOIN `tt_stamps` `B` on `B`.`terminalid` = `A`.`terminalid` and `B`.`cardno` = `A`.`cardno and cast `A`.`date` as date = cast(`B`.`date` as date WHERE `A`.`cardtype` = 'TAGID' AND timestampdiff(HOUR,`A`.`date`,`B`.`date`) > 0 AND `A`.`type` = 'IN' AND `B`.`type` = 'OUT' ORDER BY cast(`A`.`date` as date); Kod:
CREATE TABLE `tt_stamps` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `terminalid` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL, `type` enum('IN','OUT') COLLATE utf8_swedish_ci DEFAULT NULL, `cardno` varchar(50) COLLATE utf8_swedish_ci DEFAULT NULL, `cardtype` varchar(50) COLLATE utf8_swedish_ci DEFAULT NULL, `date` datetime DEFAULT NULL, `location` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL, `username` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL, `employee_no` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL, `firstname` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL, `lastname` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL, `role` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL, `competence` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL, PRIMARY KEY (`id`), KEY `terminalid` (`terminalid`,`cardno`), KEY `date` (`date`) ) ENGINE=InnoDB AUTO_INCREMENT=4511652 DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci; Senast redigerad av nim den 2016-09-20 klockan 15:48 |
||
Svara med citat |
2016-09-21, 13:56 | #7 | ||
|
|||
Nykomling
|
Jag håller med SvanteH, känns lite som att du lägger ner onödig tid på att ta fram den optimala relations-tabellen, i stället för att göra klart programmet. Det är inte ofta man vet exakt vad man behöver i första implementationen.
|
||
Svara med citat |
Svara |
|
|