10. april 2004 - 11:48Der er
168 kommentarer og 1 løsning
Hjælp til opbyggning af db og asp
Skal have lavet det som vises på linket, og har lidt problemer med at finde ud af hvordan jeg skal lave databasen bl.a
Det skal være noget lignende drømmeholdet hvor man vælger 6 spillere, som man så følger gennem hele sæsonen.
men hvordan skal jeg lige bygge databasen op, samt hvordan får jeg overført værdien ja/nej ud fra hver spiller ned i databasen.
Når man har lavet sit "hold" skal man kunne liste det hele efter points, det skal jeg nok selv finde ud af, men lige hvordan man skal vælge og få det ned i db, er mit store problem, da jeg ikke har pøvet dette med checkboxe før
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Du kan lave 3 tabeller. 1. Spillere sid | spiller_navn | andre data
2. Hold hid | Holdnavn | DeltagerNavn | Email | andre data
3. HoldSpillere id | hid | sid
Så kan du i HoldSpillere gemmme sid på de 6 spillere et hold (hid) har. Så hvis hold med hid 4 har spillere 4,5,8,212,56,32 så vil HoldSpillere se sådan her ud:
Så kan du altid gå via HoldSpillere og JOIN for at tælle point vise holdet mm.
Det også nemt at gemme, du giver alle checkboxse samme navn "spillere" og i value på hver checkbox sætter du spilleres sid. Fordelen er et checkbox kun overføres hvis den er valgt. Så du får altså de 6 sid i en kommastreng/array som let kan ligges i databasen.
jo jo eagleeye, jeg prøvcer mig lige frem, du ved jo godt jeg ikke er verdens største haj til asp, men jeg prøver mig aligevel frem, så spørger jeg bare når jeg kommer i problemer
den sidste fangede jeg name på textfelt var navn i stedet for spillernavn, så nu funker den del, smider flere points i piljen da dette kan tage længere tid inden jeg er færdig kan jeg se
som det står i mit spørgsmål skal jeg oprette spillere som man kan vælge til sit dreamteam. Brugerne skal så vælge 6 spillere ud fra listen, som de så giver et holdnavn.
og til sidst skal alle hold listes efter hvem der fører
hmm.. så burde det jo være nemt at synkronisere dine filer, med serverens.. ? Du har din website-mappe på computeren, som du så oploader.. aller mapper+filer i website-mappen.. Så er du sikker på, at alle ændringerne kommer med..
Fint: alle felter skal udfyldes, inden formen submittes :-)
Man kan gøre det her på 2 måde: 1) via JavaScript (klientside, sker i browseren, kan manipuleres) 2) via ASP (serverside, sker på serveren, kan ikke manipuleres)
Så skal du hente "hid" ud af databasen som på den post som lige er blevet lavet. Dette skal måske lige rettes alt efter database typen du bruger:
SQL = "SELECT @@IDENTITY FROM hold" Set RS = Conn.Execute(SQL) hid = rs(0)
Så skal du havde lagt hid og sid ind i tabellen som samler spillerne til holdet (de 6 valgte). De kan hentes med:
spillerid = Request.Form("spiller") sidArr = Split(spillerid, ",") for i = lbound(sidArr) to ubound(sidArr) SQL = "insert into HoldSpillere (hid,sid) values (" & hid & "," & trim(sidArr(i) Conn.Execute(SQL) next
men du skal havde alle checkboxe til at havde samme navn i det eks jeg lige har vist skal deres navn være "spiller". Og i value på checkbox'en skal spilleren ID være.
Ok :) ja det håber jeg på. Men jeg er nød til at smutte igen nu.
Det med JOIN eks, hvis man vil havde alle spillerne tilsluttet et hold, her holdet med hid=1:
SELECT hold.holdnavn, spiller.spillernavn FROM (hold LEFT JOIN holdspiller ON hold.hid = holdspiller.hid) LEFT JOIN spiller ON holdspiller.sid = spiller.sid WHERE hold.hid=1;
jeg må se om eagleeye kommer forbi i morgen, da jeg har prøvet alt her til aften uden at komme vider. Men indtil vider kan du jo lige smide et svar thesurfer, for det du har hjulpet mig med
Den SQL som henter alle spilerne ud til et hold vi se sådan her ud:
SQL = "select spillere.* from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or ... or spillere.sid=hold.spiller_6) and hold.hid=1"
Som jeg ser det har du mindst 2 tabeller. En til spiller og en til hold. Spørgsmålet er om du mener der skal være en tabel som laver relationen imellem spiller og hold tabellen, eller om relationen skal ligge i 6 kolonner i hold tabellen. Der er nogle regler, "En spiller kan være på mange hold", så derfor skal hold relationen ikke være i spiller tabelen.
Tit kan det være en ide at tegne tabellerne på et ark papir og skrive kolonnenvane på. Tegne pile hvor der er relationer imellem tabelerne.
En anden ting er også hvor dynamisk skal systemet være? Du skriver: >> ...hvor man vælger 6 spillere, som man så følger gennem hele sæsonen. Betyder det man ikke kan udskifte spillere igennem en sæson?
Ok, hvis du syntes forslaget 10/04-2004 12:07:52 forvirdre kan du overveje det sidste. JOIN sætter to tabeller ved siden af hinanden sådan de fremstår som en tabel. Hvis man har en kolonne til hver spiller skal man ud i nogle lange where dele som så skal udgøre JOIN'en.
Man kan sige, hvis det kun er en gang man kan vælge spiller kan man "nøjes" med 6 kolonner en til hver spiller i hold tabelen. Men jeg mener du skal vælge den du har det bedst med.
Koden som indsætter et nyt hold vil stadigvæk være meget lig den anden. Nu skal spilerne så bare indsættes i hold tabellen og ikke i relation tabellen. Så man skal ikke hente idet på det nye hold som er indsat, dog skal man så hente sid for alle spilerne ind i den første SQL sætning.
Ja det skal der være, og den føste løsning er relationen i en tabel, den anden er relationen i 6 kolonner så hvor kolonne spiller_1 til spiller_6 er en relation til spillere tabellen.
<% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("xxxx.mdb") SQL = "select spillere.* from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or ... or spillere.sid=hold.spiller_6) and hold.hid=1" Conn.Execute (SQL) Set rs = conn.Execute(SQL) %>
ok det måske ikke det hele som skulle pakkes ind. Du bruge vel også connection til at vise alle spiller, så det med Conn skal være før if sætningen sådan her:
SQL = "select spillere.* from spillere, hold where (spillere.sid=hold.spiller_1 -------------------------------------------------------------------------------^
med brug af denne:
<% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("xxxx.mdb") SQL = "select spillere.* from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or spillere.sid=hold.spiller_4 or spillere.sid=hold.spiller_5 or spillere.sid=hold.spiller_6) and hold.hid=1" Conn.Execute (SQL) Set rs = conn.Execute(SQL) %>
Der er vist kommet et return ind efter hold.spiller_1 prøv sådan her:
<% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("xxxx.mdb") SQL = "select spillere.* from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or spillere.sid=hold.spiller_4 or spillere.sid=hold.spiller_5 or spillere.sid=hold.spiller_6) and hold.hid=1" Conn.Execute (SQL) Set rs = conn.Execute(SQL) %>
Men det med hold.hid=1 skal være noget andet eller listen den kun for et hold.
Så der skal en order by hold.hid ind:
<% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("xxxx.mdb") SQL = "select spillere.* from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or spillere.sid=hold.spiller_4 or spillere.sid=hold.spiller_5 or spillere.sid=hold.spiller_6) order by hold.hid" Conn.Execute (SQL) Set rs = conn.Execute(SQL) %>
Nå jeg må til og i seng. Jeg begynder faktisk at tvivle lidt på om det vil virker på den måde. Selve SQL sætning skal nok rettes til dette:
SQL = "select hold.holdnavn, spillere.* from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or spillere.sid=hold.spiller_4 or spillere.sid=hold.spiller_5 or spillere.sid=hold.spiller_6) order by hold.hid"
ok :) Jeg har lige lavet en lille test og det kan vist godt lige gå,
<% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("xxxx.mdb") SQL = "select hold.holdnavn, spillere.* from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or spillere.sid=hold.spiller_4 or spillere.sid=hold.spiller_5 or spillere.sid=hold.spiller_6) order by hold.hid" Set rs = conn.Execute(SQL) do while not rs.EOG Reponse.Write rs("holdnavn") & " - " & rs("spiller_navn") & "<br>" rs.Movenext loop %>
kunne også tænke mig at få at vide hvordan man kan få et mellemrum mellem holdene, jeg får en mellem hver spiller og ikke mellem hver 6 som laver et hold
Når jeg bruger din sidste version, får jeg denne fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x11e0 Thread 0x12a8 DBC 0x1625014 Jet'.
Eagleeye-> hvad skal tabellen holdspiller bruges til, den er tom nu? Den tabel skal ikke bruges hvis du bruge det med spiller_1 til spiller_6 kolonnerne i hold tabellen.
Jeg er endnu engang på vej ud af døren :( men skriv bare nogle spørgsmål, så vil jeg svare på den senere i dag.
Til denne: Nu fik jeg den til at virke, men den gamle er bedre at arbejde med da den tager scoren med Gamle?
Hvis du vil liste hele holdet må du når du udskriver lige lave en sum variable hvor man summere point for hver spiller som så udskrives til sidst. Hvis du bare vil havde holdnavnet+summen af point uden spillerne listet kan du bruge SQL til at summere.
--->Hvis du vil liste hele holdet må du når du udskriver lige lave en sum variable hvor man summere point for hver spiller som så udskrives til sidst. Hvis du bare vil havde holdnavnet+summen af point uden spillerne listet kan du bruge SQL til at summere.
Ja jeg vil kun have holdet og den totale sum vist med den bedste score øverst. Men jeg er selv på vej ud af døren, skal til fyn og er først tilbage onsdag
SQL = "select sum(spillere.point) as totalpoint, hold.holdnavn from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or spillere.sid=hold.spiller_4 or spillere.sid=hold.spiller_5 or spillere.sid=hold.spiller_6) group by hold.holdnavn"
totalpoint er et alias eller en ny "kolonne" som du kan udskrive fra recordsetet.
Du skal rette spillere.point til den kolonne som indeholder point så det er måske totalt?
SQL = "select sum(spillere.totalt) as totalpoint, hold.holdnavn from spillere, hold where (spillere.sid=hold.spiller_1 or spillere.sid=hold.spiller_2 or spillere.sid=hold.spiller_3 or spillere.sid=hold.spiller_4 or spillere.sid=hold.spiller_5 or spillere.sid=hold.spiller_6) group by hold.holdnavn"
ok, så hvis du vil regne sidste rundes vinder ud er det kolonnen sidsterunde der skal summeres er det for alle runder er det kolonnen totalt som skal bruges.
det vil ikke være en sidste runde vinder men kun en service således at man kan se hvad man har fået i sidste runde. det er kun totalt som skal regnes sammen og vises ud for hold navnet.
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.