Avatar billede fancy Mester
01. august 2012 - 23:47 Der er 6 kommentarer og
1 løsning

vis data som grafik

Jeg kunne godt tænke mig at vise data fra min db som grafik.
ide'ne er at fra en vagt plan at vise navne vandret og tidspunkt lodret


tidspunkt      navn 1 navn 2 navn 3

15-20          #####
20-21                  #####
21-22                        #####

Men det kniber med at komme igang

nogen ide'er
02. august 2012 - 12:38 #1
Spørgsmål til spørgsmål:  (1)Hvilke data har du siddende i din db?  I en enkelt tabel, eller skal der trækkes data fra flere tabeller?
(2)  Du taler om grafik - drejer det sig 'bare' om at få et skema med navne vandret og tidsrum lodret og så kryds for hvem der har vagt i hvilke tidsrum?  Kan flere personer have vagt i et tidsrum?
(3)  Skal du have lavet et skema for hver dag?  Kan der være tale om nattevagter, således at et tidsrum kan strække sig over to datoer, såsom fra 2300 til 0600, eller således at et skema skal strække sig over to datoer, såsom fra 2 august 0600 til 3 august 0600?
Avatar billede fancy Mester
02. august 2012 - 17:45 #2
1) 2 tabeller
vagt_arrdb indeholder vagttype
vagt_tilmdb indholder persondata
begge med unike id'er

2) Skemaet skal dække et vagt område fx Fadølsbar, hvor vagterne starter fx kl 09.00-og slutter næste dag kl 03.00


db struktur

Vagt_arrdb

Column     Type     Null     Default     Comments
aid     int(10)     No           
anavn     varchar(100)     No           
asted     varchar(100)     No           
dato     varchar(100)     No           
adag     varchar(100)     No           
afra     varchar(10)     No           
atil     varchar(10)     No           
abesk     varchar(10000)     No           
tilmeldt     varchar(10)     No           
pladser     varchar(10)     No           
atildelt     varchar(100)     No           
bilsti     varchar(100)     No           
aar     int(4)

vagt_tilmdb

Column     Type     Null     Default     Comments
tid     int(4)     No           
tnavn     varchar(100)     No           
tadr     varchar(100)     No           
tpnr     varchar(100)     No           
tby     varchar(100)     No           
ttel     varchar(100)     No           
tmail     varchar(100)     No           
forening     varchar(100)     No           
numv     varchar(100)     No           
numb     varchar(100)     No           
medl     varchar(100)     No           
arrid     int(4)     No           
betalt     varchar(1)     No           
Kommet     int(4)     No           
anavn     varchar(50)     No           
adag     varchar(20)     No           
afra     varchar(10)     No           
atil     varchar(10)     No           
accept     tinytext     No           
aar     int(4)     No           
sent_mail     varchar(4)     No           
mail_sent     int(4)     No           
bluse     varchar(50)     No           
tid_overf     int(10)
02. august 2012 - 19:41 #3
Jeg konstaterer, at du med dine valg af datatyper i tabellerne gør det yderst vanskeligt at løse den stillede opgave.  Det er især et problem, at du placerer datoer og tidspunkter som VARCHAR i stedet for som DATETIME.  Videre, hvordan ved du hvilken person der har hvilken vagt?  Står det i 'atildelt'?  I såfald burde datatypen for atildelt være INT, og der burde stå tid for den pågældende person.  Hvis du er indstillet på at rette det til kan jeg sandsynligvis komme med forslag til at løse det.  Hvis du vil, eller er nødt til, at fastholde den nuværende tabelstruktur må jeg nok vælge at bakke ud.

Hvis du har et bestemt antal vagttyper, såsom fadølvagt i baren og opvask i køkkenet, så vil jeg foreslå en særskilt tabel for vagtyper, såsom:

Vagttype:
id anavn asted
1  fadøl bar
2  opvask køkken
3  dørmand hallen

Så slipper du for i vagt_arrdb at indføre de samme vagttyper og steder igen og igen.  I stedet indfører du blot vagttypens id. Du erstatter felterne anavn og asted med et felt type med datatype INT.
Og i vagt_arrdb foreslår jeg, at du erstatter felterne dato, adag, afra, atil, og aar med to felter start og slut af datatype DATETIME.
Hvis tilmeldt og atildelt henviser til personer bør de som nævnt have datatype INT.  Pladser ved jeg ikke hvad betyder, så det lader ligge.
02. august 2012 - 19:45 #4
ved gennemlæsningen ser jeg, at det kan misforstås, at du i feltet atildelt skal placere noget med tiden for en person.  Du skal placere personens id nummer fra vagt_tilmdb, det du kalder 'tid'
Avatar billede fancy Mester
02. august 2012 - 21:36 #5
ok jeg er ikke gearet til at ændre min db struktur da jeg er midt i tilmeldinger,fordig jeg ikke bruger time i db er at jeg syndes det nemerer at arbejde med timestamp(unden at vide om det giver yderlige problemmer)
men hvis nu sådan grunliggende du skulle forklare hvordan jeg kunne lave et sådan skema uden at sætte noget kode på, er det så noget med at lave en tabel

ellers tak for interessen og læg et svar
02. august 2012 - 23:15 #6
Du oprettede spørgsmålet i kategorien php, så jeg går ud fra, at det anvender du, og så gætter jeg på, at du for databasen anvender mysql.

Så gætter jeg videre på, at du vil lave et skema for hver arbejdsdag, hvor en arbejdsdag er fra 0900 en dato til 0300 den følgende dato.  I skemaet skal vandret stå de persoher der har vagt den pågældende dag, og lodret skal de forskellige vagtperioder stå, og i krydserne skal stå hvilke vagter de pågældende personer har på de pågældende tidspunkter.

Så hvis du kan få trukket de rigtige data ud fra databasen (hvad jeg som sagt ikke tør binde an med), så en måde at lave skemaet er at echoe html-tabel elementer.

Meget skematisk:

Du kan starte med sådan en kode-stump: 

<?php
echo "<table>";
echo "<tr>";
echo "<td>tidspunkt</td>";
...[1]...
echo "</tr>";
...[2]...
echo "</table>";
?>

Derved får du startet på strukturen på en tabel til skemaet, og du får lavet den første celle i den første række, der hvor der skal stå 'tidspunkt'.

Der hvor jeg har skrevet ...[1]... skal du så have resten af første række, navnene på de der har vagt, noget med (i pseudokode).  Den arbejdsdag du vil have har du placeret i $arbejdsdag.

<?php
echo "<table>";
echo "<tr>";
echo "<td>tidspunkt</td>";

$result = mysql_query("SELECT [person fra ....] WHERE [arbejdsdagen = '$arbejdsdag'");
while($row = mysql_fetch_array($result))
{
  echo "<td>";
  echo $row['person']
  echo "</td>";
}
echo "</tr>";
...[2]...
echo "</table>";
?>

Så har du skemaets første række med i første felt ordet 'tidspunkt' og med et felt for hver person der har vagt den pågældende arbejdsdag.

Så skal du have udfyldt ...[2]... med en række for hvert vagttidspunkt.  Det drejer sig igen om at echoe "<tr>";..."</tr>"; og echoe "<td> tidspunktet </td>"; og derefter for hver person echoe "<td> vagten </td>"; 

Det var så, i meget store linjer, hvordan man i php kan præsentere et skema med udtræk fra en database.  I stedet for at echoe så meget kan man gå frem og tilbage mellem php og html kode.  Det har visse fordele, men det ser (endnu mere) indviklet ud, så det lader jeg ligge.

Jeg håber det trods alt har været til nytte.  Du bad om et svar, så det får du.
Avatar billede fancy Mester
03. august 2012 - 00:12 #7
Store linier jo men alligeveldet giver noget at tænke over jeg har lavet en tabel hvor jeg hiver alle data med personer og møde tider ud men nogle gange giver det et bedre overblik med noget grafik, end med tekst og tal,jeg vender tilbage hvis jeg går i sort (igen)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester