Avatar billede no_doubt Nybegynder
03. april 2003 - 23:10 Der er 33 kommentarer og
1 løsning

to tabellers data er ens

I dette spm:
http://www.eksperten.dk/spm/335576

Har jeg forsøgt at finder ud af hvordan man kan sammen ligne to tabellers data, er der en der vil forklare det lidt bedre, eller komme med et eksempel.
Avatar billede no_doubt Nybegynder
03. april 2003 - 23:57 #1
Der må da være nogen der kan forklare denne problem stilling.
Avatar billede mortrr Praktikant
04. april 2003 - 00:24 #2
Der er sikkert mange der kan og vil hjælpe dig, men du har ikke forklaret hvad du er ude efter, på en fornuftig måde.

Hvis du vil have hjælp, så skal du gøre dig lidt mere umage med at beskrive hvad du har, og hvad du gerne vil have.

Du har indtil flere gange forsøgt at få et svar på det samme spørgsmål, men du har ikke prøvet at uddybe hvad du er ude efter, selv om det er tydeligt, at dem der forsøger at hjælpe, ikke har fanget hvad du mener.

Forsøg en gang til:
Beskriv dine tabeller.
Beskriv de data du har.
Beskriv hvad du vil ende op med.
Gerne med eksempler.
Avatar billede no_doubt Nybegynder
04. april 2003 - 00:44 #3
Mine tabeller: vinder, dinespil, bruger
Data i vinder : spilID og vinder
Data i dinespil (dem jeg skal bruge): spilID, vinder og gevindst
Data i bruger: bruger points

Jeg vil så gerne ende op med at når jeg køre denne: http://www.1q.frip.dk/odds/vinder.asp
Den ligger spillet ID i vinder (spilID) og selve vinderen i samme tabel i kolonnen vinder
Så skal der bare kontrolleres hvorvidt
SpilID og vinder fra vinder tabellen er lig med spilID og vinder fra dinespil tabellen, hvis de er det skal den tage værdien fra gevindst i tabellen dinespil og lægge dem til de nuværende points i tabellen bruger
Så skal den nulstille gevindst i dinespil

Hvis spilID og vinder ikke passer sammen i de to tabeller skal gevindst bare nultilles.

Håber det var bedre
Avatar billede mortrr Praktikant
04. april 2003 - 00:57 #4
Det kan klares med et par sql-sætninger. Tror faktisk jeg skrev den til dig første gang du spurgte.
Du mangler et felt i dinespil: Hvilken bruger der har spillet. Jeg har kaldt det BrugerID

spilID=123
Vinder=456
sql="UPDATE Bruger SET Point=Point+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder=" & Vinder & " AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.brugerID=Bruger.bruger)"
Conn.Execute(sql)

For at få nulstillet dinespil:
sql="UPDATE dinespil SET gevindst=0 WHERE spilID=" & spilID
Conn.Execute(sql)
Avatar billede mortrr Praktikant
04. april 2003 - 00:59 #5
Og jo - det var en bedre forklaring.

Du bør forresten kalde dine tabeller og felter noget forskelligt.
Det andet med et vinder felt i vinder, medvirker til at forvirre.
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:03 #6
prøv at se: http://80.162.124.81/odds/vinder.asp?SpilID=4

tryk udfør.. den skriver en fejl og det øverste er en response.write af sql'en
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:11 #7
kan måske lige sige at den nu ser sådan ud:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source="& Server.MapPath("spildatabase.mdb")
spilID= request.querystring("SpilID")
Vinder= Request.Form("D1")
sql2="UPDATE Brugere SET point=point+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder=" & Vinder & " AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.bruger=brugere.bruger)"
response.write sql2
Conn.Execute(sql2)
%>
Avatar billede mortrr Praktikant
04. april 2003 - 13:14 #8
vinder.vinder=Nummer 1
Hvis det er en tekst skal der ' omkring.
sql2="UPDATE Brugere SET point=point+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder='" & Vinder & "' AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.bruger=brugere.bruger)"

Men, du burde nu bruge en ID.
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:16 #9
samme siden, den melder nu en anden fejl
Avatar billede mortrr Praktikant
04. april 2003 - 13:20 #10
Det betyder at et eller flere felter er stavet forkert.

Du bliver nødt til at lære lige at kigge igennem om det andre skriver til dig er rigtigt ;-)

sql2="UPDATE Bruger SET point2=point2+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder=" & Vinder & " AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.bruger=bruger.bruger)"
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:25 #11
Hvad er den nederste her ?
Avatar billede mortrr Praktikant
04. april 2003 - 13:25 #12
Sorry. Kan åbenbart ikke ramme tastaturet.

sql2="UPDATE Bruger SET points=points+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder=" & Vinder & " AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.bruger=bruger.bruger)"
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:26 #13
vil du evt have databasen, jeg kan ikke se fejlen.
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:29 #14
Avatar billede mortrr Praktikant
04. april 2003 - 13:31 #15
Hedder bruger tabellen ikke Bruger? (Update bruger ...)

Men fejlen kan også betyde at databasen er skrivebeskyttet, men jeg tror nu ikke det er derfor, få så kunne du ikke noget som helst.
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:32 #16
nej brugere
Avatar billede mortrr Praktikant
04. april 2003 - 13:36 #17
Så er det fordi man ikke får lov til at opdatere tabellen brugere.

Den anonyme internet bruger skal have skriverettigheder i den mappe hvor databasen ligger, og til selve databasen
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:43 #18
nej det kan altså ikke være rigtigt.
Avatar billede no_doubt Nybegynder
04. april 2003 - 13:56 #19
jeg kan altså opdatere pointsne på en anden side.
Avatar billede no_doubt Nybegynder
04. april 2003 - 14:15 #20
Er du der endnu.. på en anden side laver jeg denne.
indsatspoints = "update brugere set points=points-'" & Request.Form("indskud") & "' where bruger='Mark'"

Og den virker
Avatar billede mortrr Praktikant
04. april 2003 - 14:35 #21
Det er mig der har lavet en tanketorsk. Man kan jo ikke lave updates med subqueries i access. Duh. Jeg arbejder næsten kun med rigtige databaser til daglig, så jeg er en anelse undskyldt. Men alligevel.

Nå. Man bliver nødt til at lave det i et par trin.

Opret en tabel til gevindster.
Gevindster:
bruger - tekst
gevindst - tal

Og så skal du i stedet for den ene sql-statement bruge tre styk.

sql="insert into gevindster (bruger,gevindst) SELECT bruger, sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder='" & vinder & "' AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder group by bruger;"
Conn.Execute(sql)

sql="UPDATE Brugere inner join gevindster on brugere.bruger=gevindster.bruger SET points=points+gevindster.gevindst"
Conn.Execute(sql)

sql="DELETE * FROM Gevindster"
Conn.Execute(sql)

SÅ skulle den være der.
Avatar billede mortrr Praktikant
04. april 2003 - 15:50 #22
Kunne du få det til at virke?
Avatar billede no_doubt Nybegynder
04. april 2003 - 15:55 #23
Okay har lavet det lidt om af praktisk årsager men håber du kan hjælpe alligvel.
det er nu dinespil.SpilID og spil.SpilID samt dinespil.vinder og spilvinder der skal være ens for at man kan vinde hvordan skal den så se ud, kunne forstille mig at det gjorde det lidt nemmere.

Og gevindst er stadig i dinespil.gevindst og de skal så ligges i brugere.points hvis de overstående stemmer overens og derefter nulstilles ellers bare nulstilles.
Avatar billede mortrr Praktikant
04. april 2003 - 16:08 #24
Bob bob bob...

sql="UPDATE Brugere inner join dinespil on brugere.bruger=dinespil.bruger inner join spil on dinespil.spilID=spil.spilID AND dinespil.vinder=spil.vinder SET Brugere.points=Brugere.points+dinespil.gevindst where spil.spilid=" & spilID & " AND spil.vinder='" & Vinder & "'"
Conn.Execute(sql)
sql="UPDATE dinespil SET gevindst=0 WHERE SpilID=" & SpilID
Conn.Execute(sql)
Avatar billede no_doubt Nybegynder
04. april 2003 - 16:29 #25
dem den giver det her ud:
UPDATE brugere inner join dinespil on brugere.bruger=dinespil.bruger inner join spil on dinespil.spilID=spil.spilID AND dinespil.vinder=spil.vinder SET brugere.points=brugere.points+dinespil.gevindst where spil.spilID=3 AND spil.vinder='Vinder 3'

Men det virker ikke.. pointsne bliver ikke updateret.

http://80.162.124.81/odds/vinder.asp?SpilID=3
Avatar billede mortrr Praktikant
04. april 2003 - 16:45 #26
Hmm - den virker eller her. (jeg har lavet en database med tabeller der ligner dine, så jeg ikke løber ind i flere tanketorsk)

Lad os prøve at korte den ned.
spil er egenligt ikke nødvendig i sætningen, da du allerede har vinder og spil.

sql="UPDATE Brugere inner join dinespil on brugere.bruger=dinespil.bruger SET Brugere.points=Brugere.points+dinespil.gevindst where dinespil.spilid=" & spilID & " AND dinespil.vinder='" & Vinder & "'"
Avatar billede no_doubt Nybegynder
07. april 2003 - 15:26 #27
det hele ser nu sådan ud, hvad skal laves om:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source="& Server.MapPath("spildatabase.mdb")

SQL = "select * from spil where SpilID = "& SpilID &" and vinder is null"
Set rs = Conn.Execute(SQL)
if rs.eof then
Response.write ("Spillet er afsluttet og vinderen er fundet!") & "<br>"
else
sql = "UPDATE spil SET vinder='" & Request.Form("D1") & "' WHERE SpilID = " & SpilID & ""
Conn.Execute(sql)
end if
sql2 = "UPDATE brugere inner join dinespil on brugere.bruger=dinespil.bruger SET brugere.points=brugere.points+dinespil.gevindst where dinespil.spilID='" & spilID & "' AND dinespil.vinder='" & Request.Form("D1") & "'"
Set rs = Conn.Execute(sql2)
'if rs.eof then
'sql2="UPDATE dinespil SET gevindst=Vundet WHERE SpilID= " & SpilID & ""
'else
'sql2="UPDATE dinespil SET gevindst=Tabt WHERE SpilID= " & SpilID & ""
end if
%>

Det her laver en fejl når den opdatere, for hvis jeg vinder 100 og i forvejen har 300 så er tallet i databasen blevet til 300100

Desuden ved jeg ikke hvad der er galt med de linjer med ' foran
Avatar billede mortrr Praktikant
07. april 2003 - 15:39 #28
300100: Du skal bare lave dine felter om fra tekst til tal felter.

Vundet/Tabt:
Du får ikke et recordset tilbage når du kører en update, så de sidste linier giver ingen mening.
Desuden ved din database ikke hvad vundet eller tabt betyder.
Og eftersom du SKAL lave dit gevindst felt om til tal, kan du ikke bare ændre Vundet til 'Vundet'.
Jeg ville tilføje et ekstra felt, som blev sat til 1 hvis de vandt. og ændre updaten til
sql2 = "UPDATE brugere inner join dinespil on brugere.bruger=dinespil.bruger SET brugere.points=brugere.points+dinespil.gevindst, dinespil.vundet=1 where dinespil.spilID='" & spilID & "' AND dinespil.vinder='" & Request.Form("D1") & "'"
Set rs = Conn.Execute(sql2)

Der er jo egentligt ikke nogen grund til at sætte den til noget specielt hvis de har tabt.
Hvis du gerne vil have nulstillet gevindst, så kan du bruge
sql2 = "UPDATE dinespil SET gevindst=0 WHERE dinespil.spilID='" & spilID & "'"
Set rs = Conn.Execute(sql2)
efter ovenstående. Men den har jeg jo vist dig tidligere.
Avatar billede no_doubt Nybegynder
07. april 2003 - 16:07 #29
Hmm kan man ikke ligge de 100 til de 300 på nogen måde jeg kan da trække fra sååå ?

Jeg vil gerne have den til at skrive vundet eller tabt udfra hvad der er sket i et felt der hedder udfald ?
Avatar billede mortrr Praktikant
07. april 2003 - 16:18 #30
Hvis du fortæller databasen at den skal lægge "300" til "100", så vil det altid blive "100300".
Når du trækker noget fra en tekst, så kan den godt regne ud at du har lagt tal ind i et tekstfelt, og vil så prøve at trække fra inden den melder fejl.
Det vil formentligt kunne lade sig gøre med
brugere.points=brugere.points-0+dinespil.gevindst
eller
brugere.points=(brugere.points-0)+(dinespil.gevindst-0)
men det er altså ikke en særligt fornuftigt fremgangsmåde.

"Jeg vil gerne have den til at skrive vundet eller tabt udfra hvad der er sket i et felt der hedder udfald ?"
Selvfølgelig kan man det.
Avatar billede no_doubt Nybegynder
07. april 2003 - 16:44 #31
Hvordan med udfald ? Det andet virker nu.
Avatar billede mortrr Praktikant
07. april 2003 - 17:00 #32
Nu falder du igen tilbage til at tro jeg er synsk.

Jeg ved hverken hvor udfald feltet er, eller hvad der står i det.
Avatar billede no_doubt Nybegynder
07. april 2003 - 17:02 #33
udfald er i dinespil og der skal stå tabt eller vindet + resultatet (altså vinderen)
Avatar billede mortrr Praktikant
07. april 2003 - 17:13 #34
Hvis Request.Form("D1") stadig indeholdet vinderen, så bliver det vist:
sql2 = "UPDATE dinespil SET udfald=iif(dinespil.vinder='" & Request.Form("D1") & "','Vundet " & Request.Form("D1") & "','Tabt " & Request.Form("D1") & "')  WHERE dinespil.spilID='" & spilID & "'"
Set rs = Conn.Execute(sql2)
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
Kurser inden for grundlæggende programmering

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