webForumDet fria alternativet

Göra join utan relationer

38 svar · 1 267 visningar · startad av WebbisNet · sida 2 av 2

emissionMedlem sedan dec. 19996 721 inlägg
#21

Mer specifikt vill jag se koden där visitor-recordsetet skapas, och raderna runt detta

WebbisNetMedlem sedan feb. 20032 027 inlägg
#22
if view("sex")="F" then
gender="Kvinna"
else
gender="Man"
end if

if CBool(view("inloggad")) then
online="<font color=""green"">Online</font>"
else
offline="<font color=""red"">Offline</font>"
end if

username=view("username")

Set visitor=objConn.Execute("SELECT DISTINCT ID, userID, username, HomeUserId, HomeVisitorId, HomeDateVisited, HomeTimeVisited FROM tblusers_visitors INNER JOIN tblUsers ON tblusers_visitors.HomeVisitorID = tblUsers.userid WHERE HomeUserId="& request("userID") &" ORDER BY ID DESC limit 5")

lUserId = request("userID")   '# krypinets ägares id
lVisitorId = CLng(UserID)   '# besökarens id
commDate=Date()
commTime=Time()
if lUserId <> lVisitorId then
objConn.execute "INSERT INTO tblUsers_visitors (HomeUserId, HomeVisitorId, HomeDateVisited,HomeTimeVisited) VALUES(" & lUserId & "," & lVisitorId & ",'" & commDate & "','" & commTime & "')"
end if

imageLink="Http://images.webbisen.com"%>

<SCRIPT LANGUAGE="JavaScript" src="/include/scripts.js"></script>

<script language="JavaScript" type="text/javascript">
<!--
function Pic(PID)
{ 
window.open("/viewPic.asp?ID="+PID,"Pic","left=100, top=100, location=no, toolbar=no, scrollbars=no, resizable=no");    
}
//-->
</script>
WebbisNetMedlem sedan feb. 20032 027 inlägg
#23

Hur får man förresten
antalKillar=Cint(killar("Antal")/sum("Antal")*100)
antalTjejer=Cint(tjejer("Antal")/sum("Antal")*100)

att funka i MySQL

Nu har jag två olika frågor som jag gärna vill lösa :-)

emissionMedlem sedan dec. 19996 721 inlägg
#24

Vi testar...

Sök endast ut de kolumner som du behöver

Set visitor=objConn.Execute("SELECT DISTINCT userID, username, HomeDateVisited, HomeTimeVisited FROM tblusers_visitors INNER JOIN tblUsers ON tblusers_visitors.HomeVisitorID = tblUsers.userid WHERE HomeUserId="& request("userID") &" ORDER BY ID DESC limit 5")

...och plocka ut värdena i variabler

<%do until visitor.eof
visitor_HomeTimeVisited=visitor("HomeTimeVisited")
visitor_HomeDateVisited=visitor("HomeDateVisited")
visitor_username=visitor("username")
visitor_userID=visitor("userID")

%>
<a href="javascript:popup(<%=visitor_userID%>);"><img border="0" ALT="Information om <%=visitor_username%>" src="/images/icons/info.gif"></a>

<a class="menu" <%=linkmessage%> href="view.asp?userID=<%=visitor_userID%>">
<%
If Len(visitor_username) > 5 Then
    Response.Write Left(visitor_username, 5) & ".."
Else
    Response.Write visitor_username
End If%>
</a> 
&nbsp;<%=visitor_HomeDateVisited%>&nbsp;<%=visitor_HomeTimeVisited%><br /> 
<%visitor.movenext:loop%>

Prova gärna ändringarna var för sig, så att vi vet vad som funkar, om det funkar.

WebbisNetMedlem sedan feb. 20032 027 inlägg
#25

med nya SQL-en: Ingen skillnad

med visitor-loopen: Ingen skillnad

Ser fortfarande
Webbi.. 2005-11-07 2005-11-07
Webbi.. 2005-11-07 2005-11-07
Webbi.. 2005-11-07 2005-11-07
test 2005-11-07 2005-11-07
Webbi.. 2005-11-07 2005-11-07

emissionMedlem sedan dec. 19996 721 inlägg
#26

WebbisNet skrev:

Hur får man förresten
antalKillar=Cint(killar("Antal")/sum("Antal")*100)
antalTjejer=Cint(tjejer("Antal")/sum("Antal")*100)

att funka i MySQL

Nu har jag två olika frågor som jag gärna vill lösa :-)

Om du kör med 3 olika frågor, som du verkar ha gjort i Access (om den kod du visade var riktig), så funkar det precis likadant. Koden du visade är ASP-kod, så den är i princip inte beroende av vad du kör för DBMS.

Med en fråga kan du göra så här:

SELECT COUNT(*) as UserCount,COUNT(CASE WHEN Sex='M' THEN 1 ELSE NULL END) as MaleCount,COUNT(CASE WHEN Sex='F' THEN 1 ELSE NULL END) as FemaleCount FROM tblUsers

och med ett recordset från den frågan

antalKillar=Cint(rs("MaleCount")/rs("UserCount")*100)
antalTjejer=Cint(rs("FemaleCount")/rs("UserCount")*100)

Man kan göra procentberäkningen direkt i SQL:en om man vill, men jag tänkte att det kunde vara trevligt att få ut de exakta antalen. Exemplet gör det möjligt att introducera andra kön också (!). Egentligen räcker det ju att plocka ut antalet för det ena könet.

emissionMedlem sedan dec. 19996 721 inlägg
#27

Lite testkod:

<%do until visitor.eof

for each field in visitor.fields
   Response.Write field.Name & ":" & field.Type & ":" & visitor(field.Name) & "<BR>"
next
visitor_HomeTimeVisited=visitor("HomeTimeVisited")
visitor_HomeDateVisited=visitor("HomeDateVisited")
visitor_username=visitor("username")
visitor_userID=visitor("userID")

%>
<a href="javascript:popup(<%=visitor_userID%>);"><img border="0" ALT="Information om <%=visitor_username%>" src="/images/icons/info.gif"></a>

<a class="menu" <%=linkmessage%> href="view.asp?userID=<%=visitor_userID%>">
<%
If Len(visitor_username) > 5 Then
    Response.Write Left(visitor_username, 5) & ".."
Else
    Response.Write visitor_username
End If%>
</a> 
&nbsp;<%=visitor_HomeDateVisited%>&nbsp;<%=visitor_HomeTimeVisited%><br /> 
<%visitor.movenext:loop%>
WebbisNetMedlem sedan feb. 20032 027 inlägg
#28

Resultat av testkoden

userID:3:1
username:200:Webbisen
HomeDateVisited:133:2005-11-08
HomeTimeVisited:134:
 Webbi..  2005-11-08 
userID:3:1
username:200:Webbisen
HomeDateVisited:133:2005-11-07
HomeTimeVisited:134:2005-11-08
 Webbi..  2005-11-07 2005-11-08
userID:3:1
username:200:Webbisen
HomeDateVisited:133:2005-11-07
HomeTimeVisited:134:2005-11-08
 Webbi..  2005-11-07 2005-11-08
userID:3:1
username:200:Webbisen
HomeDateVisited:133:2005-11-07
HomeTimeVisited:134:2005-11-08
 Webbi..  2005-11-07 2005-11-08
userID:3:1
username:200:Webbisen
HomeDateVisited:133:2005-11-07
HomeTimeVisited:134:2005-11-08
 Webbi..  2005-11-07 2005-11-08
WebbisNetMedlem sedan feb. 20032 027 inlägg
#29

Fick Type mismatch på antalKillar-raden

objConn.Execute("SELECT COUNT(*) as UserCount,COUNT(CASE WHEN Sex='M' THEN 1 ELSE NULL END) as MaleCount,COUNT(CASE WHEN Sex='F' THEN 1 ELSE NULL END) as FemaleCount FROM tblUsers")

antalKillar=Cint(rs("MaleCount")/rs("UserCount")*100)
antalTjejer=Cint(rs("FemaleCount")/rs("UserCount")*100)

emissionMedlem sedan dec. 19996 721 inlägg
#30

Det vore fint om du skapade ett recordset också... ;)

WebbisNetMedlem sedan feb. 20032 027 inlägg
#31

är trött, ska upp kl 05....jobb imorrn

med
set rs=objConn.Execute("SELECT COUNT(*) as UserCount,COUNT(CASE WHEN Sex='M' THEN 1 ELSE NULL END) as MaleCount,COUNT(CASE WHEN Sex='F' THEN 1 ELSE NULL END) as FemaleCount FROM tblUsers")

if rs.eof then
response.write "Inga poster"
else
do until rs.eof
antalKillar=Cint(rs("MaleCount")/rs("UserCount")*100)
antalTjejer=Cint(rs("FemaleCount")/rs("UserCount")*100)
rs.movenext: loop
end if

får jag iaf
Killar: 5 (100%)
Tjejer:

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/stats.asp, line 0

Hoppas vi löser allt imorrn kväll , sov gott så länge emission och tack för kvällens hjälp så försöker vi imorrn kväll

emissionMedlem sedan dec. 19996 721 inlägg
#32

Ett sista försök

Set visitor=objConn.Execute("SELECT DISTINCT userID, username, HomeDateVisited, CAST(HomeTimeVisited as varchar(20)) as HomeTimeVisited FROM tblusers_visitors INNER JOIN tblUsers ON tblusers_visitors.HomeVisitorID = tblUsers.userid WHERE HomeUserId="& request("userID") &" ORDER BY ID DESC limit 5")

Om det fortfarande inte fungerar så rekommenderar jag att du bygger om tabellen så att det bara finns en kolumn (HomeDateTimeVisited?) där du lagrar tidpunkten som en komplett DATETIME, dvs. med både datum och tid.

WebbisNetMedlem sedan feb. 20032 027 inlägg
#33

kan du tänka dig att det var så enkelt som att ändra datatyperna date och time i db till text :-)

WebbisNetMedlem sedan feb. 20032 027 inlägg
#34

WebbisNet skrev:

kan du tänka dig att det var så enkelt som att ändra datatyperna date och time i db till text :-)

Hur ska vi fixa denna del med?
set rs=objConn.Execute("SELECT COUNT(*) as UserCount,COUNT(CASE WHEN Sex='M' THEN 1 ELSE NULL END) as MaleCount,COUNT(CASE WHEN Sex='F' THEN 1 ELSE NULL END) as FemaleCount FROM tblUsers")

if rs.eof then
response.write "Inga poster"
else
do until rs.eof
antalKillar=Cint(rs("MaleCount")/rs("UserCount")*100)
antalTjejer=Cint(rs("FemaleCount")/rs("UserCount")*100)
rs.movenext: loop
end if

får jag iaf
Killar: 5 (100%)
Tjejer:

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/stats.asp, line 0

och sen strular den här funktionen
Function alder(intAlder)
alder = Left(FormatNumber(DateDiff("y", intAlder, Date())/365.2375),4)
End Function

jag får
Type mismatch: 'FormatNumber'
på en sida medan den kan funka på en annan sida

emissionMedlem sedan dec. 19996 721 inlägg
#35

WebbisNet skrev:

kan du tänka dig att det var så enkelt som att ändra datatyperna date och time i db till text :-)

Ja, det kan jag tänka mig. Det var helt klart Time-datatypen som spökade. En DATETIME kan vara lämplig, om du vill göra datumberäkningar direkt i databasen.

WebbisNet skrev:

Hur ska vi fixa denna del med?
set rs=objConn.Execute("SELECT COUNT(*) as UserCount,COUNT(CASE WHEN Sex='M' THEN 1 ELSE NULL END) as MaleCount,COUNT(CASE WHEN Sex='F' THEN 1 ELSE NULL END) as FemaleCount FROM tblUsers")

if rs.eof then
response.write "Inga poster"
else
do until rs.eof
antalKillar=Cint(rs("MaleCount")/rs("UserCount")*100)
antalTjejer=Cint(rs("FemaleCount")/rs("UserCount")*100)
rs.movenext: loop
end if

får jag iaf
Killar: 5 (100%)
Tjejer:

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/stats.asp, line 0

Du behöver ingen loop, eftersom du bara får tillbaka en rad från databasen.

Det verkar som om du försöker hämta värden från rs, efter dessa rader.

WebbisNetMedlem sedan feb. 20032 027 inlägg
#36

emission skrev:

Ja, det kan jag tänka mig. Det var helt klart Time-datatypen som spökade. En DATETIME kan vara lämplig, om du vill göra datumberäkningar direkt i databasen.

Du behöver ingen loop, eftersom du bara får tillbaka en rad från databasen.

Det verkar som om du försöker hämta värden från rs, efter dessa rader.

Fick till statistiken med, hur skriver man en åldersfunktion som passar till alla rs och inte bara vissa som på min sida :-)

den jag har funkade utmärkt i access men inte nu i MySQL

emissionMedlem sedan dec. 19996 721 inlägg
#37

Vad innehåller intAlder? Variabelnamnet indikerar att det är en "int", men det är väl ett datum?

Function alder(fodelsedatum)
    datDatum=cdate(fodelsedatum)
    intAlder= DateDiff("yyyy", datDatum, Date())
    If Date() < DateSerial(Year(Date()), Month(datDatum),Day(datDatum)) Then
        intAlder= intAlder- 1
    End If
    alder= intAlder
End Function
WebbisNetMedlem sedan feb. 20032 027 inlägg
#38

Strular bara på startsidan där jag visar födelsedagar, alla andra funkar med den funktionen

Set bday=objConn.Execute("Select * From tblUsers where persnr="& varDate &" ")
<%=alder(bday("persnr"))%>

Felmeddelande
Microsoft VBScript runtime error '800a005e'

Invalid use of Null: 'cdate'

/include/functions.asp, line 35

@ndersMedlem sedan juni 200032 969 inlägg
#39

Då får du undvika att köra funktionen om det är sparat NULL i fältet.

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)