Tjena! Eftersom du i tabellen användare har smeknamn är det onödigt att dubbellagra detta samt om användaren byter sitt smeknamn kommer du få olika resultat när du tittar i tabellen anvBesök.Logga senaste besökare på ens profil...
Jag har kommit en bit på mitt lilla community och skulle vilja bygga på den lite.
Jag vill som användare kunna se de 5 senaste besökarna som sett min profil.
Så tänkte jag det.
tblAnvandare tblAnvBesok
--------------- --------------
idSmeknamn idAnvBesok
osv... idSmeknamn
fltDatumBesok
När man kommer in på hans profil så vill jag lägga till mitt idSmeknamn i hans tblAnvBesok-idSmeknamn.
Sen läser jag ut vilka som senast besökt sidan.
Är det rätt tankesätt?
Problemet är nu hur jag ska bygga SQL-satsen, är lite osäker hur jag ska göra.
Hoppas det finns någon här som kan hjälpa mig.
/MagnusSv: Logga senaste besökare på ens profil...
En quick & dirty lösning:
Se istället till att lägga till idAnvBesok i tabellen användare och låt fältet vara av typen text. När en användare har varit där så har du personens id och då lägger du till det i den strängen. Det du kommer förlora här är NÄR personen tittade men jag anser det inte så viktigt, eller?
Om vi tänker oss att användaren tittar på din sida och några tittade förrut så skulle textsträngen kunna se ut som följer:
12,14,21,155,444,
Alltså har användare 12,14,21,155 och 144 sett din sida där 12 var den senaste som besökte. Nu kommer olle in med nummer 52. Då ser du till att lägga 52 först med denna kod:
<code>
sql = "update tblAnvaendare set idAnvbesok = '" & visitorid & ",' + idAnvbesok where anvid = " & anvid
con.execute sql
</code>
Det som händer nu är att strängen fylls med 52 längst till vänster och sedan läggs tidigare värden på, alltså: 52,12,21,155,444
Vad som händer är att allting skjuts framåt och det bara byggs på och byggs på. Om fältlängden inte är längre än låt säga 40 så ser du till att du inte heller skickar in längre än 40 tkn för att undvika fel - exempelvis:
<code>
sql = "update tblAnvaendare set idAnvbesok = substring('" & visitorid & ",' + idAnvbesok,1,40) where anvid = " & anvid
con.Execute sql
</code>
Nu kanske du får plats med 8-9 poster och slipper fel och gör det med lite kod och sparar plats i databasen. Sedan när du hämtar ut detta så använder du bara split-kommandot eller skriver en select-sats med de poster som finns i den strängen:
<code>
Set rst=con.execute("select anvbesok from tblAnvaendare where anvid = " & anvid)
If Not rst.Eof Then
anvbesok = rst(0)
End If
sql = "select * from tblAnvaendare where anvid in(" & anvbesok & ") "
Set rst=con.Execute(sql)
</code>
Nu får du ett recordset med alla användare som besökt personen. Det kan tänka sig att du får fel och då beror det troligen på att den sista posten kan vara "avhuggen" eftersom det är max 40 tecken och det kan bli vad som helst där.
Den andra varianten är att helt enkelt ha ett recordset som du föreslagit och istället för 3 fält så har du
<code>
sql = "insert into tblAnvBesok (anvid, visitorid, datumbesok) values(" & anvid & "," & visitorid & ",#" & now & "#")
con.Execute sql
</code>
för att sedan läsa dessa poster så skriver du en join för att hämta namnen:
<code>
sql = "select top 5 anvid, förnamn,efternamn " & _
"from tblAnvaendare as a, tblAnvBesok as b " & _
"where a.anvid = b.anvid " & _
"and a.anvid = " & anvid & " " & _
"order by b.datumbesok desc"
Set rst=con.Execute(sql)
Do While Not rst.Eof
Response.Write rst("förnamn") & " " & rst("efternamn") & "<br>"
rst.MoveNext
Loop
</code>
anvid är vilka som besökt anvid:s sida och sen får du ut de 5 senaste besöken för den specifika användaren.
Mer detaljerat svar än detta kan jag nog inte ge dig..
/Pelle