Avatar billede mskjoldp Novice
11. januar 2004 - 06:29 Der er 23 kommentarer og
1 løsning

Dubletter mellem 2 tabeller ønskes vist

Hvordan får jeg udtrukket data fra to tabeller og tjekket om værdierne er ens?

Jeg har rodet noget med det men kan ikke hittet ud af det. Jeg har prøvet noget ala dette:

        Set rs = Conn.Execute("SELECT * FROM bruger")
        Set rss = Conn.Execute("SELECT * FROM logsession")
        Dim ses, sess
        Response.Write(Session.SessionID) & " er på nu" & "<br><br>"
        Do While Not rs.Eof
        ses = rs("SessionID")
        If ses <> "" Then
        Response.Write ses & " "
        Response.Write("ONLINE")& "<br>"
        End if
            Do While Not rss.Eof
            sess = rss("SessionID")
            If sess <> "" Then
            Response.Write(sess) & " online fra logsession" & "<br><br>"
            End if
            rss.MoveNext
            Loop
        rs.MoveNext
        Loop
        rs.Close
        rss.Close

Det er selvfølgelig den tilbagevendende "hvem er på" problemstilling

/Skjold
Avatar billede mskjoldp Novice
11. januar 2004 - 07:03 #1
Tabellerne har ikke samme antal rækker (nedaf).

Første table (rs) indeholder Bruger information inkl. SessionID da sessionen blev oprettet.

Anden tabel (rss) indeholder SessionID fra global.asa.

Hvis SessionID i rs tabellen også eksistere i rss tabellen så er Brugeren's session stadigvæk aktiv. Dette er min problemstiling, jeg ved ikke hvordan jeg skal gribe det an at få kontrolleret tabellerne mod hinanden.

/Skjold
Avatar billede mskjoldp Novice
11. januar 2004 - 08:35 #2
Eksempel der ikke virker:

        Set rs = Conn.Execute("SELECT * FROM bruger")
        Set rss = Conn.Execute("SELECT * FROM logsession")
        Dim ses, sess
       
        ses = rs("SessionID")
        sess = rss("SessionID")
       
        If ses = sess Then
        Response.Write("Online")
        Else
        Response.Write(Session.SessionID)
        End if
                   
        rs.Close
        rss.Close

Men det er tanken...

/Skjold
Avatar billede ducks Nybegynder
11. januar 2004 - 08:45 #3
Du kan ikke sige at hele tabellerne skal være ens, du er nødt til fx at sige du vil finde Brugernavn fra bruger hvor ID er det samme som logsession ID og omvendt:

Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "Select
        bruger.Brugernavn,
        logsession.Log From
      From
        bruger,
        logsession
      Where
        bruger.ID=logsession.ID"
RS.Open SQL, Conn, 3, 3

If Not RS.EOF Then
  Response.Write("Online")
Else
  Response.Write(Session.SessionID)
End If

Set RS = Nothing
Set SQL = Nothing
Avatar billede ducks Nybegynder
11. januar 2004 - 08:46 #4
Prøver lige igen, tror det her virker:

Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "Select
        Brugernavn
      From
        bruger
      Where
        bruger.ID=logsession.ID"
RS.Open SQL, Conn, 3, 3
Avatar billede ducks Nybegynder
11. januar 2004 - 08:47 #5
Avatar billede mskjoldp Novice
11. januar 2004 - 09:15 #6
Vil det sige at hvis jeg har 5 poster i tabel 1:

tabel 1:
db feltnavn: SessionID
db værdi 1:    12345
db værdi 2:    12346
db værdi 3:    12347
db værdi 4:    12348
db værdi 5:    12349

så kan jeg ikke sammenligne de 5 poster med tabel 2?

tabel 2:
db feltnavn: SessionID
db værdi 1:    0
db værdi 2:   
db værdi 3:    12345
db værdi 4:    15
db værdi 5:    12346
db værdi 6:   
db værdi 7:   
db værdi 8:      34
db værdi 9:    12348
osv...

Og der hvor der er ens tal skal der skrives Online ud for en bruger, eller et andet felt sættes til True.

/Skjold
Avatar billede ducks Nybegynder
11. januar 2004 - 09:43 #7
Jeg er ikke helt med på hvad du mener?

Men du kan finde ud af om de findes ved at bruge isNull(RS(0))
Avatar billede mskjoldp Novice
11. januar 2004 - 09:46 #8
kan du giv mig et eks.. så jeg kan komme igang
Avatar billede mskjoldp Novice
11. januar 2004 - 09:48 #9
denne her fejler..

Set rs = Conn.Execute("SELECT nick FROM bruger WHERE bruger.SessionID=logsession.SessionID")

er det fordi opsætningen er forkert eller kan jeg bare ikke se fejlen, som er:

Too few parameters. Expected 1

/Skjold
Avatar billede ducks Nybegynder
11. januar 2004 - 09:49 #10
Du kan ikke sige at hele tabellerne skal være ens, du er nødt til fx at sige du vil finde Brugernavn fra bruger hvor ID er det samme som logsession ID og omvendt:

Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "Select * From bruger,logsession Where bruger.ID=logsession.ID"
RS.Open SQL, Conn, 3, 3

If Not RS.EOF Then
  Response.Write("Online")
Else
  Response.Write(Session.SessionID)
End If

Set RS = Nothing
Set SQL = Nothing
Avatar billede ducks Nybegynder
11. januar 2004 - 09:49 #11
Hov teksten skulle ikke med der.
Avatar billede erikjacobsen Ekspert
11. januar 2004 - 09:50 #12
Hvad er det du vil have skrevet ud fra det eksempel du har her med tabel1 og tabel2.
Prøv at vis os det konkrete resultat.
Avatar billede ducks Nybegynder
11. januar 2004 - 09:51 #13
Nu tror jeg det er mig der roder rundt i det..

For at se fejl: Funktioner > Internetindstillinger > Avanceret > Du fjerner nu fluebenet fra feltet "Vis meddelelser om uskadelige HTTP-fejl > Tryk nu OK og kør din kode igen! (taget fra www.frip.dk)
Avatar billede mskjoldp Novice
11. januar 2004 - 10:03 #14
--> erikjacobsen

Jeg gemmer Session.SessionID i en tabel via global.asa, når så en Bruger logger på sitet så gemmes hans Session.SessionID i bruger-tabellen under hans Bid.

Dvs at jeg har to tabeller (logsession og bruger) med samme Session.SessionID nr som jeg gerne vil bruge til at vise at hans session er aktiv. Dette gælder så for alle loggede ind hvis bruger-Session.SessionID er = logsession-Session.SessionID.

Jeg har lige prøvet denne:

Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "Select bruger.nick From bruger, logsession Where bruger.SessionID=logsession.SessionID"
RS.Open SQL, Conn, 3, 3

men fejlen er Data Types mismatch in critiria expression.

/Skjold
Avatar billede mskjoldp Novice
11. januar 2004 - 10:04 #15
Fluebenet var fjernt inden jeg gik ind under Avanceret

/Skjold
Avatar billede ducks Nybegynder
11. januar 2004 - 10:15 #16
Den sidste SQL tror jeg ikke du skal skrive logsession, altså:

SQL = "Select bruger.nick From bruger Where bruger.SessionID = logsession.SessionID"
Avatar billede mskjoldp Novice
11. januar 2004 - 10:20 #17
Denne her mangler en parameter:

Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "Select bruger.nick From bruger Where bruger.SessionID=logsession.SessionID"
RS.Open SQL, Conn, 3, 3
Do While Not rs.Eof
Response.Write rs("nick")
rs.Movenext
loop
rs.Close

/Skjold
Avatar billede mskjoldp Novice
11. januar 2004 - 10:38 #18
og denne her mismatcher i data:

Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "Select bruger.SID From bruger, logsession Where bruger.SID=logsession.SessionID AND bruger.BrugerOnline='True'"
RS.Open SQL, Conn, 3, 3
Do While Not rs.Eof
Response.Write rs("SID")
rs.Movenext
loop
rs.Close
Avatar billede mskjoldp Novice
11. januar 2004 - 10:39 #19
det samme gør denne:

SQL = "Select bruger.SID From bruger, logsession Where bruger.SID=logsession.SessionID"

/Skjold
Avatar billede mskjoldp Novice
11. januar 2004 - 10:41 #20
Jeg syntes nu at jeg har fuldt referencen fra http://www.w3schools.com/sql/sql_join.asp til punkt og prikke, men det fejler, please help.

/Skjold
Avatar billede ducks Nybegynder
11. januar 2004 - 10:53 #21
SQL = "Select bruger.SID From bruger,logsession Where bruger.SID = logsession.SessionID"

Dette burde virke, det gør det ihvertfald hos mig.

Altså:

Select Output From Alle_Tabeller_Der_Er_Involveret Where Tabel.Kolonne = Tabel2.Kolonne"
Avatar billede mskjoldp Novice
11. januar 2004 - 11:00 #22
jeg har løst den. Koden var korrekt når fejlen var mismatch men så manglede jeg at tabelfelterne skulle være af samme type, det blev rettet til tal og nu virker det....

--> ducks du får din points

/Skjold
Avatar billede mskjoldp Novice
11. januar 2004 - 11:01 #23
tak for hjælpen
Avatar billede ducks Nybegynder
11. januar 2004 - 11:07 #24
Heh.. sidder også tit i lang tid og prøver at løse et problem og så opdager jeg at problemet var et helt andet og ganske enkelt :\
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