Mer specifikt vill jag se koden där visitor-recordsetet skapas, och raderna runt detta
Göra join utan relationer
38 svar · 1 267 visningar · startad av WebbisNet · sida 2 av 2
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>
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 :-)
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>
<%=visitor_HomeDateVisited%> <%=visitor_HomeTimeVisited%><br />
<%visitor.movenext:loop%>
Prova gärna ändringarna var för sig, så att vi vet vad som funkar, om det funkar.
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
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.
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>
<%=visitor_HomeDateVisited%> <%=visitor_HomeTimeVisited%><br />
<%visitor.movenext:loop%>
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
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)
Det vore fint om du skapade ett recordset också... ;)
ä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
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.
kan du tänka dig att det var så enkelt som att ändra datatyperna date och time i db till text :-)
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
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 iffå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.
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
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
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
Då får du undvika att köra funktionen om det är sparat NULL i fältet.